Отбросить все строки группы при выполнении условия? - PullRequest
1 голос
/ 31 марта 2019

У меня во фрейме данных Pandas есть двухуровневая группа, основанная на 'col10' и 'col1'. Все, что я хочу сделать, это удалить все строки группы, если указанное значение в другом столбце повторяется илиэто значение не существовало в группе (оставьте группу, в которой указанное значение существовало только один раз), например:

  • Исходный фрейм данных:

    df = pd.DataFrame( {'col0':['A','A','A','A','A','B','B','B','B','B','B','B','c'],'col1':[1,1,2,2,2,1,1,1,1,2,2,2,1], 'col2':[1,2,1,2,3,1,2,1,2,2,2,2,1]})

enter image description here

Мне нужно сохранить строки для группы, например (['A',1],['A',2],['B',2]) в этом оригинальном DF

  • Требуемый фрейм данных:

enter image description here

  • Я пробовал этот шаг:

    df.groupby(['col0','col1']).apply(lambda x: (x['col2']==1).sum()==1)

где результат

col0  col1
A     1        True
      2        True
B     1       False
      2        True
c     1       False
dtype: bool

Как создать нужный Df на основе этого bool?

1 Ответ

1 голос
/ 31 марта 2019

Вы можете сделать это следующим образом:

m=(df.groupby(['col0','col1'])['col2'].
     transform(lambda x: np.where((x.eq(1)).sum()==1,x,np.nan)).dropna().index)
df.loc[m]

Или:

df[df.groupby(['col0','col1'])['col2'].transform(lambda x: x.eq(1).sum()==1)]

   col0  col1  col2
0     A     1     1
1     A     1     2
2     A     2     1
3     A     2     2
4     A     2     3
12    c     1     1
...