You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:10:23