【发布时间】:2018-10-05 20:53:36
【问题描述】:
这是一个 Pandas 问题 - 今天我的大脑太累了,无法解决这个问题。 有人可以帮我吗? 我有一个包含许多列的数据框,其中一列作为一个类别:
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'] 中所有行的值的总和,其中 df ['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 的类别中的每个值循环。
这是解决问题的正确方法吗?
【问题讨论】:
-
所以你想要 B 和 D 在每组中求和,但 C 你只想要每组的第一个值?您能在这里更明确地说明您的要求吗?
-
您的问题不清楚,请重新构图并举例说明。
-
我想通过总结所有有数字的列来按类别分组。我可以放心地忽略没有数字或为空的列。
标签: python pandas dataframe pandas-groupby