如何用Pandas统计多列中三类字符串出现次数并生成新列?
跨多列统计符合条件值的次数
问题需求
需要新增Received_money列,统计每行中所有Job列里值为Yes、Partial或paid的出现次数;同时要批量选中15个Job列,无需手动逐个指定列名。
示例数据
import pandas as pd # 初始化数据 data = [['tom', "Yes", "No"], ['nick', "Partial", "Yes"], ['juli', "No", "No"]] # 创建DataFrame df = pd.DataFrame(data, columns=['Name', 'Job1', 'Job2'])
完整解决方案代码
# 批量筛选所有以Job开头的列 job_cols = df.columns[df.columns.str.startswith('Job')] # 统计每行符合条件的次数 df['Received_money'] = df[job_cols].isin(['Yes', 'Partial', 'paid']).sum(axis=1)
代码说明
- 批量选择Job列
利用df.columns.str.startswith('Job')匹配所有列名以Job开头的列,自动获取全部15个Job列,无需手动罗列Job1至Job15,结果job_cols会包含所有符合条件的列名列表。 - 扩展统计符合条件的值
df[job_cols].isin(['Yes', 'Partial', 'paid'])会将每个符合条件的单元格标记为True,不符合的标记为False;再用sum(axis=1)对每行的True值求和(True等价于1,False等价于0),直接得到每行符合条件的次数。
运行结果
| Name | Job1 | Job2 | Received_money |
|---|---|---|---|
| tom | Yes | No | 1 |
| nick | Partial | Yes | 2 |
| juli | No | No | 0 |
内容的提问来源于stack exchange,提问作者wick
相关产品推荐
相关产品推荐

