熊猫:根据条件删除群组

时间:2018-01-18 23:10:41

标签: python pandas pandas-groupby

我希望在满足条件时从我的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

实现这一目标的好方法是什么?只有我能想到的方式是旋转,过滤和融化。

3 个答案:

答案 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
相关问题