Панды условно групповой - PullRequest
       18

Панды условно групповой

3 голосов
/ 25 сентября 2019

У меня есть кадр данных, как показано ниже:

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, а затем выбрать только строку, в которой col_3 равно True.В тех случаях, когда у меня есть только одно вхождение значения в col_1, я хочу выбрать строку независимо от того, является ли col_3 истинным или ложным.Итак, результат, которого я добиваюсь:

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

Я думаю, что я должен использовать groupby, но я не уверен.Я действительно мог бы помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Вот один из способов

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
1 голос
/ 25 сентября 2019

Вы можете использовать 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
...