pandas将指定多列字符串替换为1并新增行计数汇总列的实现方法
实现方案
首先确认列索引规则:pandas的列索引默认从0开始计数,如果你要操作的是自然顺序第22~65列,用df.iloc[:, 21:65]即可选中对应范围(iloc切片为左闭右开规则,截止值设为65刚好包含索引为64的第65列)。
情况1:无需修改原有疾病列内容,仅新增计数列
对应你给出的示例输出效果,不需要改动原列数据,一行代码即可完成:
# 统计指定列中非空值的数量,赋值给新增列 df['Total_diseases'] = df.iloc[:, 21:65].notna().sum(axis=1)
情况2:需要将指定列中非NA的疾病文本标记为1
如果要同时完成值替换和计数需求,代码如下:
# 非NA值替换为1,保留原NA值 df.iloc[:, 21:65] = df.iloc[:, 21:65].where(df.iloc[:, 21:65].isna(), 1) # 逐行统计1的数量 df['Total_diseases'] = df.iloc[:, 21:65].sum(axis=1)
如果你的目标列中存在非空但不属于疾病文本的内容,需要精准匹配疾病规则再替换,比如所有疾病文本都包含disease关键词,可使用如下代码:
# 仅将匹配disease关键词的非空值替换为1,其余值保持不变 df.iloc[:, 21:65] = df.iloc[:, 21:65].apply( lambda col: col.map(lambda x: 1 if isinstance(x, str) and 'disease' in x.lower() else x) ) # 统计每行符合要求的疾病数量 df['Total_diseases'] = df.iloc[:, 21:65].eq(1).sum(axis=1)
内容的提问来源于stack exchange,提问作者Anakin Skywalker
相关产品推荐
相关产品推荐

