Pandas如何根据分组条件修改列值并生成新列
pandas分组新增列实现方案
你可以通过groupby结合transform方法完成需求,两种常用实现方式如下:
代码实现
import pandas as pd # 原始数据 d = {'id': [1, 1, 2, 2, 3], 'value': [0, 1, 0, 0, 1]} df = pd.DataFrame(data=d) # 方法1:使用内置max聚合(性能更高,适合大数据量场景) # 同一分组内value最大值为1则说明存在1,否则最大值为0,完全匹配需求 df['newvalue'] = df.groupby('id')['value'].transform('max') # 方法2:使用自定义lambda+any判断(可读性更强) # 直接对应“分组内存在任意1就返回1”的规则 # df['newvalue'] = df.groupby('id')['value'].transform(lambda x: 1 if x.any() else 0) print(df)
运行后输出结果和你期望的完全一致:
id value newvalue 0 1 0 1 1 1 1 1 2 2 0 0 3 2 0 0 4 3 1 1
说明
transform方法会将分组聚合后的结果广播到分组内的所有行,刚好匹配你需要同组所有行取值一致的要求- 优先推荐方法1,pandas内置聚合函数的执行效率远高于自定义lambda函数,数据量越大优势越明显
内容的提问来源于stack exchange,提问作者vojta
相关产品推荐
相关产品推荐

