Python pandas如何将列中1汇总到对应ID分组的首行
你要实现的效果可以通过groupby聚合直接完成,核心逻辑是按ID分组后对X/Y/Z列取最大值(0和1的最大值等价于“该组存在1则返回1,否则返回0”,完全匹配你的需求),无需手动移动数值到首行。
完整实现代码
首先导入依赖并构造测试数据:
import pandas as pd # 构造和你示例一致的DataFrame data = { "ID": ["A", "A", "A", "B", "B", "B", "B"], "X": [1, 0, 1, 0, 1, 0, 1], "Y": [0, 0, 0, 1, 0, 0, 0], "Z": [0, 1, 0, 0, 0, 1, 0] } df = pd.DataFrame(data)
核心聚合逻辑:
# as_index=False 保证ID为普通列而非索引,输出结构和你预期完全一致 end_df = df.groupby("ID", as_index=False).max()
输出验证:
print(end_df)
运行结果:
ID X Y Z 0 A 1 0 1 1 B 1 1 1
通用扩展方案
如果你的X/Y/Z列存在0、1之外的其他数值,仅需要判断该ID下是否出现过1,可以用更严谨的聚合写法:
end_df = df.groupby("ID", as_index=False)[["X", "Y", "Z"]].agg( lambda col: int((col == 1).any()) )
内容的提问来源于stack exchange,提问作者Valderas
相关产品推荐
相关产品推荐

