假设我有这个数据框:

df = DataFrame({'ID': [1001,4003,1001, 4003, 7000, 7000],
            'col_2': ['3', '8', '2', '1','7','9'],
            'col_3': ['Steak','Chicken','Chicken','Steak','Chicken','Chicken']})

我想创建3个数据帧。
前两个是每个有鸡的ID的数据帧第二个是所有有牛肉的身份证。这很简单:
dfsteak = df[~(df['col_3'] != 'Steak')]
dfchicken =  df[~(df['col_3'] != 'Chicken')]

但对于第三个,我想放弃任何一排,如果一个身份证没有鸡一次,和牛排另一次。在这个例子中,df是id 7000,他只点了鸡肉。但我该如何实现呢?

最佳答案

filterany一起使用

df.groupby('ID').filter(lambda x : ((x['col_3']=='Steak').any())&((x['col_3']=='Chicken').any()))
Out[14]:
     ID col_2    col_3
0  1001     3    Steak
1  4003     8  Chicken
2  1001     2  Chicken
3  4003     1    Steak

过滤掉id 7000
df.groupby('ID').filter(lambda x : ~((x['col_3']=='Steak').any())&((x['col_3']=='Chicken').any()))
Out[16]:
     ID col_2    col_3
4  7000     7  Chicken
5  7000     9  Chicken

关于python - 如果某列中的值不满足另一列中的要求,则删除行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50429261/

10-10 22:44