首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何将熊猫交叉表中的行相加,并做出新的交叉表?

我如何将熊猫交叉表中的行相加,并做出新的交叉表?
EN

Stack Overflow用户
提问于 2019-07-18 19:54:52
回答 3查看 1K关注 0票数 1

我有一个excel表格的数据,我已经总结在熊猫交叉表。我希望通过与相关行相加来进一步对数据进行分类。

这是我的交叉表:

所有用户-公民0 0 36 0 36民用/政府0 0 2 0 2商业3 99 412 0 514政府9 14 38 0 61政府/民事0 10 0 10政府/商业政府/军事0 0 1 0 1军事9 67 66 142军事/民用0 0 2 0 2军事/商业0 0 0 32 32 21 182 648 32 883

我只想要四个团体:民用,政府,商业和军事。如果“政府”在名称中,我想把包含它的所有行加起来。如果“军事”在这个名字里,我想把这些行相加成一列.

做这件事最好的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-18 20:22:12

pd.crosstab

从一开始就做

代码语言:javascript
复制
pd.crosstab(df.users.str.split('/').str[0], df.class_of_orbit)

groupby

在你已经拥有的基础上。如果将可调用的值传递给groupby,它将将其应用于索引,并使用结果对by进行分组。

代码语言:javascript
复制
xtab.groupby(lambda x: x.split('/')[0]).sum()

            Elliptical  GEO  LEO  MEO  All
All                 21  182  648   32  883
Civil                0    0   38    0   38
Commercial           3   99  412    0  514
Government           9   16  130    0  155
Military             9   67   68   32  176
​
票数 1
EN

Stack Overflow用户

发布于 2019-07-18 20:22:12

按每个名称的第一部分进行分组会产生

代码语言:javascript
复制
df.groupby(df.class_of_orbit.str.split('/').str.get(0)).sum()

            Elliptical  GEO LEO MEO All
class_of_orbit                  
All         21         182  648 32  883
Civil       0           0   38  0   38
Commercial  3           99  412 0   514
Government  9           16  130 0   155
Military    9           67  68  32  176
票数 1
EN

Stack Overflow用户

发布于 2019-07-18 22:10:43

爱拉斐尔和piRSquared的答案,但是如果你想把所有只有组实例的行加在一起,而不仅仅是这个组是名字的第一部分,你可以稍微修改一下piRsquared的答案。

您可以定义一个助手函数来检查一个名称是否有第二个部分,然后创建一个第二个数据帧,其中包含那些包含名称第二部分的行的和。然后将这个元素与拉斐尔和piRSquared的结果相加。我忽略了“所有”的观察,但是它可以很容易地从结果数据框架中计算出来。

希望没事,我是新来的。

代码语言:javascript
复制
def second_parts_sum(x):
    if len(x.split('/')) > 1:
        return x.split('/')[1]
    else:
        return 'to_be_dropped'

first_parts = xtab.groupby(lambda x: x.split('/')[0]).sum()
second_parts = xtab.groupby(lambda x: second_parts_sum(x)).sum()
first_parts = first_parts[first_parts.index != 'All']
second_parts = second_parts[second_parts.index != 'to_be_dropped']
first_parts + second_parts



            Elliptical  GEO  LEO  MEO  All
Civil                0    0   50    0   50
Commercial           3  101  493   32  629
Government           9   16  132    0  157
Military             9   67   69   32  177
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57101797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档