Pandas 条件分组

Pandas conditional groupby

我有如下数据框:

df = pd.DataFrame({'col_1': [6ai,6aii,6aii,6b],
               'col_2': [1,1,5,1],
               'col_3':[True,False,True,False]})

   col_1  col_2 col_3
0    6a1      1    True
1    6aii     1    False
2    6aii     5    True
3    6b       1    False

我想在 col_1 上对这个数据帧进行分组,然后仅 select col_3 为 True 的行。在 col_1 中只出现一次值的情况下,我想 select 该行,而不管 col_3 是真还是假。 所以我想要的结果是:

   col_1  col_2 col_3
0    6a1      1    True
2    6aii     5    True
3    6b       1    False

我在想我应该使用 groupby,但我不确定。我真的需要一些帮助吗?

您可以使用 groupby().transform('count') 找到恰好出现一次的那些:

df[df['col_3'] | df.groupby('col_1')['col_3'].transform('count').eq(1)]

输出:

  col_1  col_2  col_3
0   6ai      1   True
2  6aii      5   True
3    6b      1  False

这是一种方法

df[df.col_3|~df.col_1.duplicated(keep=False)]
Out[344]: 
  col_1  col_2  col_3
0   6a1      1   True
2  6aii      5   True
3    6b      1  False