Pandas str. содержит возвращенные ложные срабатывания - PullRequest
0 голосов
/ 01 ноября 2018

Я агрегирую, основываясь на том, содержит ли значение столбца «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 голосов
/ 01 ноября 2018

Просто используйте оператор == или 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())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...