下面是一个最小的示例,显示了我面临的问题。让我们的初始状态如下(我仅使用字典来进行演示):
A = [{'D': '16.5.2013', 'A':1, 'B': 0.0, 'C': 2}, {'D': '16.5.2013', 'A':1, 'B': 0.0, 'C': 4}, {'D': '16.5.2013', 'A':1, 'B': 0.5, 'C': 7}]
df = pd.DataFrame(A)
>>> df
A B C D
0 1 0.0 2 16.5.2013
1 1 0.0 4 16.5.2013
2 1 0.5 7 16.5.2013
如何从 df 到达 df_new,即:
A_new = [{'D': '16.5.2013', 'A':1, 'B': 0.0, 'C': 6}, {'D': '16.5.2013', 'A':1, 'B': 0.5, 'C': 7}]
df_new = pd.DataFrame(A_new)
>>> df_new
A B C D
0 1 0.0 6 16.5.2013
1 1 0.5 7 16.5.2013
“C”列的第一行和第二行相加,因为这两行的“B”相同。其余部分保持不变,例如,“A”列未求和,“D”列不变。假设我只有 df 并且我想获得 df_new,我该怎么做?如果可能的话,我真的很想找到某种优雅的解决方案。
提前致谢。
最佳答案
假设其他列始终相同,并且不应特殊对待。
首先创建按 B
分组的 df_new
,其中我为每列取组中的第一行:
In [17]: df_new = df.groupby('B', as_index=False).first()
然后具体计算 C
列作为每个组的总和:
In [18]: df_new['C'] = df.groupby('B', as_index=False)['C'].sum()['C']
In [19]: df_new
Out[19]:
B A C D
0 0.0 1 6 16.5.2013
1 0.5 1 7 16.5.2013
如果您的列数有限,您也可以通过为每一列指定所需的函数来一步完成此操作(但如果您有更多列,上述操作会更方便(更少的手动操作)):
In [20]: df_new = df.groupby('B', as_index=False).agg({'A':'first', 'C':'sum', 'D':'first'})
关于python - Pandas 仅对某一列进行分组和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23801559/