如何在pandas DataFrame中按列分组求和并追加指定名称汇总行
Pandas 分组求和后追加固定标识行实现
原始输入数据
country result name UK 3 created US 5 created UK 7 created India 4 completed India 6 created US 1 completed
目标输出
country result name UK 3 created US 5 created UK 7 created India 4 completed India 6 created US 1 completed UK 10 pending US 6 pending India 10 pending
实现步骤
- 按
country列分组,保留国家首次出现的顺序,对每个分组的result列求和 - 给求和结果生成新列
name,固定值为pending - 将生成的新行追加到原始DataFrame末尾,重置索引即可
完整代码
import pandas as pd # 初始化原始DataFrame df = pd.DataFrame({ 'country': ['UK', 'US', 'UK', 'India', 'India', 'US'], 'result': [3, 5, 7, 4, 6, 1], 'name': ['created', 'created', 'created', 'completed', 'created', 'completed'] }) # 生成待追加的pending行,sort=False保证国家顺序和首次出现顺序一致 pending_df = df.groupby('country', as_index=False, sort=False)['result'].sum().assign(name='pending') # 拼接原始数据和新行 final_df = pd.concat([df, pending_df], ignore_index=True)
运行后final_df的输出和目标结果完全一致。
注:如果后续数据中存在
name值不是created/completed的行,只需要在分组前增加筛选逻辑即可,将生成pending_df的代码替换为:pending_df = df[df['name'].isin(['created', 'completed'])]\ .groupby('country', as_index=False, sort=False)['result'].sum()\ .assign(name='pending')
内容的提问来源于stack exchange,提问作者Mahilan
相关产品推荐
相关产品推荐

