如何用Pandas统计DataFrame每行中指定字符串的出现次数?
解决Pandas DataFrame每行特定字符串计数问题
你想要统计DataFrame每行中'True'的出现次数,但当前代码返回的是布尔值(仅判断是否存在'True'),而非具体计数。
原问题代码
# 创建DataFrame d = {'Period': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4], 'Result': ['True','None','False','True','False','True','False','True','True','False','False','True','False','True','False','False'], 'Result1': ['True','None','False','True','False','True','False','True','True','False','False','True','False','True','False','False'], 'Result2': ['True','None','False','True','False','True','False','True','True','False','False','True','False','True','False','False']} df = pd.DataFrame(data=d) # 错误的计数方式:返回布尔值 df['Count'] = df.apply(lambda row: row.astype(str).str.count('True').any(), axis=1) print(df)
期望输出
Period Result Result1 Result2 Count 0 1 True True True 3 1 2 None None None 0 2 3 False False False 0 3 4 True True True 3 4 1 False False False 0 5 2 True True True 3 6 3 False False False 0 ... ... ... ... ... ...
正确解法
解法1:针对指定列使用apply求和
原代码的问题在于用了.any()(仅判断是否存在目标字符串),替换成.sum()即可对每行的计数求和。同时建议仅统计需要的列(避免Period数值列被误处理):
# 仅统计Result、Result1、Result2列中的'True'次数 df['Count'] = df[['Result', 'Result1', 'Result2']].apply(lambda row: row.str.count('True').sum(), axis=1)
解法2:向量化操作(更高效)
用向量化判断替代apply,性能更优,适合处理大数据量:
# 直接判断元素是否等于'True',再按行求和(True会被视为1,False视为0) df['Count'] = (df[['Result', 'Result1', 'Result2']] == 'True').sum(axis=1)
运行上述任意一种解法后,Count列会正确显示每行中'True'的出现次数,与期望输出一致。
内容的提问来源于stack exchange,提问作者John Conor
相关产品推荐
相关产品推荐

