J'ai le dataframe suivant
new_df = df.groupby(["id"]).agg({"values": lambda val: set(val)}).reset_index() TypeError: unhashable type: 'list'
Je veux obtenir ce qui suit après l'étape de groupby et d'agrégation
id values 1 [111, 121, 131, 191] 2 [211, 221, 281] 3 [301, 321]
J'utilise ce qui suit, mais cela me donne une erreur -
df = pd.DataFrame( { "id": [1, 2, 1, 3], "values": [[111, 121, 131], [211, 221, 281], [111, 191], [301, 321]], } ) # df id values 1 [111, 121, 131] 2 [211, 221, 281] 1 [111, 191] 3 [301, 321]
3 Réponses :
Une façon de le faire -
id values 0 1 [191, 131, 121, 111] 1 2 [221, 211, 281] 2 3 [301, 321]
Production
df.groupby('id')['values'].sum().apply(lambda x: list(set(x))).reset_index()
Cela devrait fonctionner
reproduisez votre exemple:
values id 1 {121, 131, 191, 111} 2 {281, 211, 221} 3 {321, 301}
Résoudre la question
df = df.groupby(by='id').sum() df[['values']] = df[['values']].applymap(lambda x: set(x))
Le résultat
import pandas as pd df = pd.DataFrame({'id': [1, 2, 1, 3], 'values': [[111, 121, 131], [211, 221, 281], [111, 191], [301, 321]]})
Vous pouvez utiliser df.explode
puis utiliser GroupBy.unique
ici.
df.explode('values').groupby('id')['values'].unique().reset_index() id values 0 1 [191, 131, 121, 111] 1 2 [221, 211, 281] 2 3 [301, 321]