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

如何用Pandas新增responder列,按指定events列范围标记y/n

解决Pandas批量判断events列生成responder列的问题

核心代码实现

import pandas as pd

# 模拟你的原始DataFrame
data = {
    'Animal_ID': ['a1', 'a2', 'a3', 'a4'],
    'weight': [50, 52, 75, 53],
    'Project': ['p1', 'p2', 'p1', 'p2'],
    'Exp_type': ['Acute', 'chronic', 'Acute', 'chronic'],
    'researcher': ['alex', 'mat', 'alex', 'mat'],
    'events_d1': [0, 0, 1, 0],
    'events_d2': [0, 1, pd.NA, pd.NA],
    'events_d3': [0, 1, 2, pd.NA],
    'events_d4': [4, 5, pd.NA, 0]
}
df = pd.DataFrame(data)

# 1. 先填充缺失值(原数据里的空白单元格会被识别为缺失值,不处理会影响判断)
target_events = df.filter(regex='events_d[1-3]').fillna(0)

# 2. 批量判断每行是否有大于0的值,生成responder列
df['responder'] = target_events.gt(0).any(axis=1).map({True: 'y', False: 'n'})

print(df)

分步说明

  • 批量选列:用df.filter(regex='events_d[1-3]')直接匹配events_d1、events_d2、events_d3,比先选所有events_d列再删除events_d4更直接,也符合你要求的批量选择逻辑。
  • 缺失值处理:原数据里的空白单元格在Pandas中是缺失值(NaN/pd.NA),直接判断会出错,所以用fillna(0)把空值替换成0,确保数值判断准确。
  • 生成标记列:gt(0)将每个单元格与0比较,返回布尔值;any(axis=1)检查每行是否存在至少一个True(即有值大于0);最后用map把布尔值转成y/n。

运行结果

Animal_ID  weight Project Exp_type researcher  events_d1  events_d2  events_d3  events_d4 responder
0        a1      50      p1    Acute       alex          0        0.0        0.0        4.0         n
1        a2      52      p2  chronic        mat          0        1.0        1.0        5.0         y
2        a3      75      p1    Acute       alex          1        0.0        2.0        NaN         y
3        a4      53      p2  chronic        mat          0        0.0        0.0        0.0         n

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:23:11