如何使用pandas按name列分组合并对应数值列内容
Pandas按name分组合并数值的实现方案
你需要的合并逻辑可以通过Pandas的分组聚合功能实现,核心是对beer、soda、water三个数值列取分组最大值,因为0和1的最大值正好满足「只要有任意一行值为1就返回1」的需求,id列按需取分组内任意值即可,示例代码如下:
import pandas as pd # 你已有的读取文件逻辑 df = pd.read_csv(path, sep='\t', names=["id", "beer", "soda", "water", "name"]) # 分组聚合逻辑 result_df = df.groupby('name', as_index=False).agg( # 取分组第一个id,如需随机可替换为 lambda x: x.sample(1).iloc[0] id = ('id', 'first'), # 数值列取最大值,有1则返回1,全0返回0 beer = ('beer', 'max'), soda = ('soda', 'max'), water = ('water', 'max') ) # 调整列顺序和原始表保持一致 result_df = result_df[['id', 'beer', 'soda', 'water', 'name']]
如果你想让逻辑更直观,也可以用any()判断是否存在1再转整数,和上面的max写法效果完全一致:
result_df = df.groupby('name', as_index=False).agg( id = ('id', 'first'), beer = ('beer', lambda x: int(x.any())), soda = ('soda', lambda x: int(x.any())), water = ('water', lambda x: int(x.any())) )
处理完成后直接把result_df写入目标文件即可得到你需要的结果。
内容的提问来源于stack exchange,提问作者linasster
相关产品推荐
相关产品推荐

