删除仅包含一个类别(Pandas-Python)的行

删除仅包含一个类别(Pandas-Python)的行,pandas,Pandas,如何删除只包含一个类别的行而不具体删除它(bydf.person) 编辑:仅df.person必须删除每一行中明确包含所有“不有趣”的内容 df = pd.DataFrame({'category': ['fun','fun','fun', 'not fun','not fun','not fun', 'fun', 'not fun','not fun'], 'person': ['Meagan', 'Meagan', 'Meagan', 'Caitlin'

如何删除只包含一个类别的行而不具体删除它(by
df.person

编辑:
df.person
必须删除每一行中明确包含所有“不有趣”的内容

df = pd.DataFrame({'category': ['fun','fun','fun', 'not fun','not fun','not fun', 'fun', 'not fun','not fun'],
                   'person': ['Meagan', 'Meagan', 'Meagan', 'Caitlin', 'Caitlin', 'Caitlin', 'Steve', 'Steve','Steve']})
print(df)

      category   person
0      fun   Meagan
1      fun   Meagan
2      fun   Meagan
3  not fun  Caitlin
4  not fun  Caitlin
5  not fun  Caitlin
6      fun    Steve
7  not fun    Steve
8  not fun    Steve
编辑:下面所需的数据帧。我想除掉凯特琳,因为她并不总是那么有趣。如果我删除任何偶尔不好玩的人,我会删除史蒂夫,我不想这样做。我不能删除一组乐趣,因为Meagan和Caitlin都将被删除

category    person
0   fun     Meagan
1   fun     Meagan
2   fun     Meagan
6   fun     Steve
7  not fun  Steve
8  not fun  Steve

首先,我们使用
not fun
为所有行创建一个
布尔数组

然后我们检查
Groupby.transform(all)
with groups have
all not fun
并删除这些组:

df['m'] = df['category'].eq('not fun')
df[~df.groupby('person')['m'].transform('all')].drop(columns='m')

  category  person
0      fun  Meagan
1      fun  Meagan
2      fun  Meagan
6      fun   Steve
7  not fun   Steve
8  not fun   Steve

首先,我们使用
not fun
为所有行创建一个
布尔数组

然后我们检查
Groupby.transform(all)
with groups have
all not fun
并删除这些组:

df['m'] = df['category'].eq('not fun')
df[~df.groupby('person')['m'].transform('all')].drop(columns='m')

  category  person
0      fun  Meagan
1      fun  Meagan
2      fun  Meagan
6      fun   Steve
7  not fun   Steve
8  not fun   Steve

嗨,尔凡,谢谢你的意见。我不得不稍微调整一下这个问题,因为我不能在巢穴中使用nunique。任何帮助都将不胜感激。嗨,尔凡,谢谢你的投入。我不得不稍微调整一下这个问题,因为我不能在巢穴中使用nunique。任何帮助都将不胜感激。