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

Pandas:无需遍历行,按分组条件更新Validated列值

无需遍历实现DataFrame的Validated列更新

完全可以不用遍历每一行,借助Pandas的分组(groupby)和transform方法就能高效实现需求,核心思路是先按指定列分组,判断每组是否存在正值,再批量更新列值。

实现代码

import pandas as pd

# 构造你提供的示例DataFrame
data = {
    'State': ['Arizona', 'Alabama', 'Arkansas', 'Kentuky', 'Ohio', 'Alabama', 'Arizona', 'California', 'California', 'Arkansas', 'Ohio', 'California'],
    'ColorName': ['Yellow', 'Orange', 'Red', 'Green', 'Blue', 'Orange', 'Yellow', 'Blue', 'Blue', 'Red', 'Yellow', 'Blue'],
    'Code': ['A', 'A', 'B', 'M', 'X', 'A', 'A', 'C', 'C', 'B', 'X', 'C'],
    'Value': [50, 150, -500, -40, 100, -30, 100, 100, -100, 500, 100, 100],
    'Validated': [''] * 12
}
df = pd.DataFrame(data)

# 核心逻辑:分组判断每组是否存在正值,批量更新Validated列
# 生成与原DataFrame同长度的布尔序列,标记每组是否有正值
has_positive = df.groupby(['State', 'ColorName', 'Code'])['Value'].transform(lambda x: (x > 0).any())
# 对无正值的组,将Validated设为"Invalid"
df['Validated'] = df['Validated'].mask(~has_positive, 'Invalid')

print(df)

代码说明

  • groupby(['State', 'ColorName', 'Code']):按你指定的三列对数据分组,把相同组合的行归为一组
  • transform(lambda x: (x > 0).any()):对每组计算是否存在Value>0的行,返回和原DataFrame行数一致的布尔序列,保证每行都能对应到所在组的判断结果
  • mask(~has_positive, 'Invalid'):当布尔值为False(即组内无任何正值)时,将该行的Validated列替换为"Invalid",其余行保持原有值(这里是空字符串)

运行后,只有Kentuky-Green-M这一组因为没有正值,对应的行Validated会被设为"Invalid",其余组均保持空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:45:41