2016-04-04 1 views
1

Maintenant, j'ai quelques données ressemble ci-dessous:Comment puis-je agréger sur plusieurs colonnes dans les pandas?

song_id        artist_id      0 days 1 days 2 days 
1 0919b5ed4ce2649f61bcc6c21fadab12 0c80008b0a28d356026f4b1097041689 0 0 0 
2 8a0777df37bf6a0f3384d63a47d4d21b 0c80008b0a28d356026f4b1097041689 0 1 0 
3 b61bc45712ee40c3f4a37dd4d063ad52 0c80008b0a28d356026f4b1097041689 0 0 0 
4 a2fbe29da3a760d7467b8a7b3247a9c8 0c80008b0a28d356026f4b1097041689 0 0 1 
5 b5e92cb9ff2126189c19305cf148b25d 0c80008b0a28d356026f4b1097041689 0 0 0 

Et je veux les regrouper par artist_id et de regrouper la somme sur 0 days, 1 days et 2 days, et obtenir le résultat comme ça.

 artist_id      0 days 1 days 2 days 
0  0c80008b0a28d356026f4b1097041689 0 1 1 

J'ai essayé

df.groupby('artist_id').sum() 

Mais il provoque une erreur.

TypeError: Cannot compare type 'Timedelta' with type 'str' 

df.info montre:

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 10842 entries, 0 to 10841 
Columns: 185 entries, song_id to 182 days 00:00:00 
dtypes: float64(183), object(2) 
memory usage: 15.4+ MB 

Comment puis-je résoudre en utilisant la manière de pandas géants?

Toute aide est la bienvenue.

+0

Qu'est-ce qu'une erreur? Pour moi cela fonctionne très bien. – jezrael

+1

Que signifie 'df.info()', si vous avez des dtypes non numériques alors 'sum' échouera – EdChum

+0

@jezrael J'ai mis à jour la question. Merci d'avoir commenté. – KIDJourney

Répondre

1

Vous pouvez utiliser astype:

df.columns = df.columns.astype(str) 
+0

Merci pour votre réponse, la fonction 'sum()' a échoué car il y a 'timedelta' dans les colonnes et elles ne peuvent pas être agrégées. – KIDJourney

+0

:) Je comprends, donc j'ajoute la prochaine solution possible avec 'astype'. – jezrael

0

Merci tout le monde.

Après avoir appliqué

df.columns = map(str,df.columns) 

L'étape

df.groupby('artist_id').sum() 

œuvres.