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

如何在DataFrame中对action=1的指定列替换为按Feature分组的最小值?

Pandas实现按分组最小值替换指定行的目标列值

这个需求我帮你拆解一下:我们要找到action等于1的所有行,然后把这些行里的Value、Value Scaled、Zscore这三列的值,替换成它们所属Feature分组下对应列的最小值。下面给你两种实用的实现方式:

方法一:分组计算最小值 + 映射替换

先提前算出每个Feature分组下目标列的最小值,再通过映射把对应的值替换到指定行:

# 第一步:计算每个Feature分组下目标列的最小值
group_min = df.groupby('Feature')[['Value', 'Value Scaled', 'Zscore']].min()

# 第二步:循环处理每个目标列,替换action=1的行
target_cols = ['Value', 'Value Scaled', 'Zscore']
for col in target_cols:
    # 用map根据Feature匹配对应的分组最小值,赋值给action=1的行
    df.loc[df['action'] == 1, col] = df.loc[df['action'] == 1, 'Feature'].map(group_min[col])

这种方法逻辑清晰,适合刚接触Pandas的朋友理解,每一步都很直观。

方法二:用transform生成全量最小值列 + 批量替换

如果想更简洁,可以用transform直接生成每行对应的分组最小值,再批量替换:

target_cols = ['Value', 'Value Scaled', 'Zscore']
# 生成每行对应的分组最小值(和原DataFrame行数一致)
min_per_row = df.groupby('Feature')[target_cols].transform('min')

# 直接把action=1的行的目标列替换成对应的分组最小值
df.loc[df['action'] == 1, target_cols] = min_per_row.loc[df['action'] == 1]

transform会自动把分组后的结果广播到原DataFrame的每一行,这样就不用手动循环映射了,代码更简洁高效。

两种方法都能实现需求,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者kspr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:32:28