Pandas实现行小计:合并status为0/1的行并保留status=2行
解决方案
需求说明
原DataFrame如下:
host status count 0 ast2 0 1 1 ast2 1 2 2 ast2 2 3 3 ast3 0 4 4 ast3 1 5 5 ast3 2 6 6 ast9 0 7 7 ast9 2 8
需要将每个host下status为0或1的行合并为status=0的行(count求和),同时保留status=2的行不变,得到目标结果。
实现代码
import pandas as pd # 构造原DataFrame df = pd.DataFrame({ 'host': ['ast2', 'ast2', 'ast2', 'ast3', 'ast3', 'ast3', 'ast9', 'ast9'], 'status': [0, 1, 2, 0, 1, 2, 0, 2], 'count': [1, 2, 3, 4, 5, 6, 7, 8] }) # 1. 分离status=2的行,直接保留原数据 df_status2 = df[df['status'] == 2].copy() # 2. 处理status为0/1的行:按host分组求和count,统一设置status为0 df_01 = df[df['status'].isin([0, 1])].groupby('host', as_index=False)['count'].sum() df_01['status'] = 0 # 3. 合并两部分数据,按host和status排序后重置索引 result = pd.concat([df_01, df_status2]).sort_values(by=['host', 'status']).reset_index(drop=True) print(result)
运行结果
host status count 0 ast2 0 3 1 ast2 2 3 2 ast3 0 9 3 ast3 2 6 4 ast9 0 7 5 ast9 2 8
内容的提问来源于stack exchange,提问作者harp1814
相关产品推荐
相关产品推荐

