这是一个熊猫问题-我的大脑太累了,无法解决这个问题。 有人可以帮我吗? 我有一个包含许多列的数据框,其中一列为类别:
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类别中的每个值循环。
这是解决问题的正确方法吗?
答案 0 :(得分:1)
您可以使用GroupBy
+ agg
为每个系列指定不同的功能。我已将C
和Z
系列链接到'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'