Pandas如何基于两列重复值对指定列数值进行高效求和?
解决方案
你可以直接用pandas内置的groupby聚合方法实现需求,该方法底层为C语言实现的矢量化运算,相比Python层自行遍历的效率有量级提升,完全适配大体积DataFrame的分组计算场景。
注意你给出的示例中C列为字符串类型,需要先转换为数值类型再做求和计算,完整实现代码如下:
import pandas as pd # 创建示例DataFrame df1 = pd.DataFrame({ 'A': ['Spain', 'France','Spain','France','France','France','Spain',], 'B': ['Meat', 'Meat','Meat','Drink','Meat','Drink','Drink'], 'C': ['10','20','30','10','20','30','10'] }) # 转换C列为整数类型 df1['C'] = df1['C'].astype(int) # 按A、B两列分组后对C列求和,as_index=False可让分组键保留为普通列而非索引 sum_df = df1.groupby(['A', 'B'], as_index=False)['C'].sum()
运行后得到的求和结果如下:
| A | B | C |
|---|---|---|
| France | Drink | 40 |
| France | Meat | 40 |
| Spain | Drink | 10 |
| Spain | Meat | 40 |
如果你不想修改原DataFrame的C列类型,也可以在聚合环节临时转换:
sum_df = df1.groupby(['A', 'B'], as_index=False)['C'].apply(lambda x: x.astype(int).sum()).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Babas
相关产品推荐
相关产品推荐

