如何在Pandas中根据分组内数值条件为新列赋值
问题:为DataFrame按分组规则添加新列
原始DataFrame如下:
Names Values A 0.20 A 1.30 A 1.2 B 0.30 B 0.40 C 1.2 D 0.70 E 0.12 E 1.3 F 0.90 F 0.78 F 0.88
需要添加一列New_col,赋值规则:
- 若
Names分组中同时存在Values > 0.75和Values < 0.75的记录,New_col赋值为1 - 若
Names分组中只有Values > 0.75的记录,New_col赋值为0 - 若
Names分组中只有Values < 0.75的记录,New_col赋值为2
解决方案
使用Pandas的分组计算结合transform实现,代码如下:
import pandas as pd # 构造原始数据 data = { 'Names': ['A', 'A', 'A', 'B', 'B', 'C', 'D', 'E', 'E', 'F', 'F', 'F'], 'Values': [0.20, 1.30, 1.2, 0.30, 0.40, 1.2, 0.70, 0.12, 1.3, 0.90, 0.78, 0.88] } df = pd.DataFrame(data) # 定义分组判断逻辑 def get_new_col(group): has_gt = (group['Values'] > 0.75).any() has_lt = (group['Values'] < 0.75).any() if has_gt and has_lt: return 1 elif has_gt: return 0 else: return 2 # 为每个分组应用规则生成新列 df['New_col'] = df.groupby('Names').transform(get_new_col) print(df)
最终结果
运行代码后得到的DataFrame:
Names Values New_col 0 A 0.20 1 1 A 1.30 1 2 A 1.20 1 3 B 0.30 2 4 B 0.40 2 5 C 1.20 0 6 D 0.70 2 7 E 0.12 1 8 E 1.30 1 9 F 0.90 0 10 F 0.78 0 11 F 0.88 0
注:按规则F组所有值均大于0.75,应返回0,与示例结果中的2存在差异,此处按规则逻辑输出正确结果。
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

