如何在Pandas DataFrame中实现COUNTIFS多条件计数并将结果写入新列
报错原因
原代码直接对df1['omg']和df2['omgangar']两个Series做逐元素对比,Pandas对比Series时会默认按索引对齐,当两个Series索引不一致时就会抛出ValueError: Can only compare identically-labeled Series objects错误。且该逻辑本身不符合需求:你需要的是对df2每行的单个omgangar值,去整个df1中匹配统计符合条件的行数,不是两个表逐行对齐比较。
正确实现方案
方案1:分组映射(推荐,大数据量性能更优)
先筛选df1中符合条件的记录,按omg分组统计计数后映射到df2:
# 1. 先筛选df1满足odds介于20-30、outcome为1的行 filtered = df1[(df1['odds'].between(20, 30)) & (df1['outcome'] == 1)] # 2. 按omg分组统计每个值对应的行数 count_map = filtered.groupby('omg').size() # 3. 映射到df2,无匹配值填充0后转整数 df2['outcome'] = df2['omgangar'].map(count_map).fillna(0).astype(int)
方案2:apply逐行统计(适合小数据量,写法直观)
对df2每行的omgangar值单独去df1中统计符合条件的行数:
df2['outcome'] = df2['omgangar'].apply( lambda x: ((df1['omg'] == x) & (df1['odds'].between(20,30)) & (df1['outcome'] == 1)).sum() )
两种方案运行后都可以得到你期望的df2结果。
内容的提问来源于stack exchange,提问作者OldSport
相关产品推荐
相关产品推荐

