我希望在满足条件时从我的pandas数据框中删除组。例如,此数据集,每当客户回答i
以回答问题a
时,我都需要从该客户中删除整个记录。
import pandas as pd
df = pd.DataFrame({'customer': [1, 1, 2], 'question': ['a', 'b', 'a'], 'answer': ['i', 'ii', 'iii']})
df
customer question answer
0 1 a i
1 1 b ii
2 2 a iii
所以对于这种情况,我需要像这样过滤掉。
customer question answer
0 2 a iii
实现这一目标的好方法是什么?只有我能想到的方式是旋转,过滤和融化。
答案 0 :(得分:3)
In [226]: df[~df.customer.isin(df.loc[df.answer.eq('i') & df.question.eq('a'),'customer'].unique())]
Out[226]:
answer customer question
2 iii 2 a
答案 1 :(得分:3)
可以通过filter
df.groupby('customer').filter(lambda x : ~((x.answer=='i')&(x.question=='a')).any())
Out[109]:
answer customer question
2 iii 2 a
答案 2 :(得分:1)
你也可以这样做(没有costum函数):
df[~df['customer'].isin(df[df['question']+df['answer']=='ai']['customer'].values)]
输出:
Out[343]:
answer customer question
2 iii 2 a