Simpliest ist zusammen, um neue Funktionalität in Pandas 0.20.0+
für groupby von Ebenen und Spalten zu verwenden:
df=df.groupby(['client','year','month'], sort=False)['from'].apply(list).reset_index('month')
print (df)
month from
client year
google 2016 2 [e]
apple 2016 1 [b, c]
2016 3 [l]
google 2016 3 [g]
Für Skalare mit einer Elementliste Lösung ist ähnlich Wen
- benutzerdefinierte Funktion mit if else
:
df=df.groupby(['client','year','month'], sort=False)['from'] \
.apply(lambda x: list(x) if len(x)>1 else x.iat[0]).reset_index('month')
print (df)
month from
client year
google 2016 2 e
apple 2016 1 [b, c]
2016 3 l
google 2016 3 g
Und für Strings, die durch ,
verbunden sind, verwenden Sie stattdessen join
list
:
df=df.groupby(['client','year','month'], sort=False)['from']
.apply(', '.join).reset_index('month')
print (df)
month from
client year
google 2016 2 e
apple 2016 1 b, c
2016 3 l
google 2016 3 g
Schöne 'set_index' :) – Wen