Mam następujący df:

d = {"Col1":['a','d','b','c','a','d','b','c'],
"Col2":['x','y','x','z','x','y','z','y'],
"Col3":['n','m','m','l','m','m','l','l'],
"Col4":[1,4,2,2,1,4,2,2]}

df = pd.DataFrame(d)

Kiedy Grofyby na trzech polach, dostaję wynik:

gb = df.groupby(['Col1', 'Col2', 'Col3'])['Col4'].agg(['sum', 'mean'])

enter image description here

Jak mogę wyodrębnić tylko grupy i wiersze, w których wiersz grupy pasuje do co najmniej jednego innego rzędu innej grupy na zgrupowanych kolumnach. Zobacz poniższy obraz, chcę uzyskać podświetlone wiersze

enter image description here

Chcę dostać rzędy na czerwono na podstawie tych w kolorze niebieskim i czarnym, który pasuje do siebie

Przepraszamy, jeśli moje oświadczenie jest niejednoznaczne. Każda pomoc byłaby doceniana

1
Ronnie 27 luty 2019, 20:11

2 odpowiedzi

Najlepsza odpowiedź

Możesz reset_index, a następnie użyj duplicated i Filtr indeksu Booleana Dataframe:

gb = gb.reset_index()
gb[gb.duplicated(subset=['Col2','Col3'], keep=False)]

Wynik:

  Col1 Col2 Col3  sum  mean
0    a    x    m    1     1
2    b    x    m    2     2
3    b    z    l    2     2
5    c    z    l    2     2
2
Scott Boston 27 luty 2019, 17:22

Zrób stół ze wszystkimi dozwolonymi kombinacjami, a następnie wewnętrzny dołącz go z tym dataframe.

0
BramV 27 luty 2019, 17:15