Python Pandas分组列

时间:2018-10-05 03:07:11

标签: python pandas dataframe pandas-groupby

这是一个熊猫问题-我的大脑太累了,无法解决这个问题。 有人可以帮我吗? 我有一个包含许多列的数据框,其中一列为类别:

Category B C D .... Z 
1        2 11 1.0 'HOME' ....
1        3 21 1.0 'HOME' ....
1        1 33 .9 'GOPHER' ....
2        4 34 0.6  'HUMM'  ...
2        1 72 1.4  'VEEE'   ...
3        5 23  2.3  'ETC '  ....
4        3 99  3.141 'PI'  ...
4        4 1  2.634 'PI'   ...

想要得到这个(文本列确实无关紧要)

Category B C D .... Z 
1        6 11 2.9 'HOME' ....
2        5 34 2.6  'HUMM'  ...
3        5 23  2.3  'ETC '  ....
4        7 100  5.775 'PI'  ...

如何在Python Pandas中执行此操作? 我可以使用group()吗?

如果df是我的DataFrame,并且结果在newdf中将是结果数据帧,则ndf ['B']中将有一行,其中newdf ['A'] = 1并且newdf ['B'] df ['A']为1的所有行的df ['B']中的值总和。
对于下一类别,ndf ['B']中将有一行,其中newdf ['A'] = 2,而newdf ['B']将是df ['B']中所有行的值之和['A']是2

,依此类推。

我正在尝试基于A列中的类别汇总列的总和。对于A中的每个类别,我想对具有相同类别的其余列进行求和。

我希望我已经正确解释了。手动地,这类似于

ndf['B'] = df[ df['A'] == 1 ].sum() 
ndf['C'] = df[ df['A'] == 1 ].sum() 

基本上,我可以使用这样的东西吗?

for col in df.columns:
    if col.type(??) is number: 
        ndf[col] = df[ df[col] == 1 ].sum() 

以及A中的每个类别;重复

ndf['B'] = df[ df['A'] == 2 ].sum() 
ndf['C'] = df[ df['A'] == 3 ].sum() 

然后我将不得不为A类别中的每个值循环。

这是解决问题的正确方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用GroupBy + agg为每个系列指定不同的功能。我已将CZ系列链接到'first',即从每个组中提取第一个值,因为这与您期望的输出一致。

agg_rules = {'B': 'sum', 'C': 'first', 'D': 'sum', 'Z': 'first'}
res = df.groupby('Category').agg(agg_rules).reset_index()

print(res)

   Category  B   C      D       Z
0         1  6  11  2.900  'HOME'
1         2  5  34  2.000  'HUMM'
2         3  5  23  2.300   'ETC'
3         4  7  99  5.775    'PI'