Chcę grupować zduplikowane wartości kolumny Dataframe, ale także zachowaj drugą kolumnę Dataframe po Groupby. Na przykład dane wyglądają: DF-

id     interest   location
1        A            X
2        A            Y
1        B            X
3        C            Z
2        D            Y

Wynik powinien być

id     interest      location
1        A,B            X
2        A,D            Y
3        C              Z

Poniższy kod daje tylko kolumnę ID i odsetek, ale chcę również uzyskać odpowiednią lokalizację użytkownika.

unique_id = df.groupby('id')['interest'].unique().reset_index()

0
user11035754 28 luty 2019, 03:12

2 odpowiedzi

Najlepsza odpowiedź

Za pomocą groupby.agg

yourdf=df.groupby('id',as_index=False).agg({'interest':','.join,'location':'first'})
yourdf
Out[140]: 
   id interest location
0   1      A,B        X
1   2      A,D        Y
2   3        C        Z
2
BENY 28 luty 2019, 00:20

Nieco niezdarne, ale działające rozwiązanie. Zupełnie podobne do tego, co zaproponowane, z wyjątkiem tego, że działa z dowolną liczbą kolumn, sortuje elementy przed agregacją, a także agreguje lokalizacje.

result = df.groupby('id').apply(lambda x:
                                pd.Series({name: ','.join(sorted(set(x[name]))) 
                                          for name in x})).reset_index()
#   id interest location
#0   1      A,B        X
#1   2      A,D        Y
#2   3        C        Z
1
DYZ 28 luty 2019, 00:30