熊猫链包含误报

时间:2018-11-01 10:15:42

标签: python pandas

我根据列值包含“ Done”还是“ Tied Done”进行汇总。本月,我收到了另外一个字符串“ Done Cancel”,该字符串被错误地聚合了。因此str.contains不再合适。可以使用哪种方法基于显式字符串求和?

aggregate = [('Total_RFQ', 'size'), ('Done_RFQ', lambda x: x.str.contains('Done').sum())]
dfProduct_Hit_Rate = dfAPAC_Bus_Mngr.groupby(['rbc_security_type1'])['state'].agg(aggregate).reset_index()

此处理想的解决方案是用str.contains代替str.match吗?即 ('Done_RFQ', lambda x: x.str.match('Done','Tied Done').sum())

1 个答案:

答案 0 :(得分:4)

只需使用==运算符或pd.Series.eq,它们需要完全匹配:

aggregate = [('Total_RFQ', 'size'),
             ('Done_RFQ', lambda x: x.eq('Done').sum())]

如果您希望包含多个字符串,请使用pd.Series.isin

aggregate = [('Total_RFQ', 'size'),
             ('Done_RFQ', lambda x: x.isin(['Done', 'Tied Done']).sum())]

如果在包含'Done'的所有其他字符串时需要排除单个字符串,请通过按位“和”运算符&组合条件。例如,使用!=pd.Series.ne

aggregate = [('Total_RFQ', 'size'),
             ('Done_RFQ', lambda x: ((x.str.contains('Done') & (x.ne('Done Cancel')).sum())]
相关问题