2016-05-16 13 views
0

In einem jupyter Notebook habe ich einen Datenrahmen aus verschiedenen zusammengeführten Datensätzen erstellt.Python/Pandas: Pivot-Tabelle

record_id | song_id | user_id | number_times_listened 

0   |ABC  | Shjkn4987 |   3 
1   |ABC  | Dsfds2347 |   15 
2   |ABC  | Fkjhh9849 |   7 
3   |XYZ  | Shjkn4987 |   20 
4   |XXX  | Shjkn4987 |   5 
5   |XXX  | Swjdh0980 |   1 

Ich möchte eine Pivot-Tabelle Datenrahmen von song_id erstellen Auflistung der Anzahl der benutzerkennungen und die Summe von number_times_listened.

Ich weiß, dass ich eine for-Schleife mit den Zähl- und Summenfunktionen erstellen muss, aber ich kann es nicht funktionieren. Ich habe auch die pd.pivot_table des Pandas-Moduls ausprobiert.

df = pd.pivot_table(data, index='song_ID', columns='userID', values='number_times_listened', aggfunc='sum') 

ODER so etwas?

Antwort

1

Sie können ein Wörterbuch der Spaltennamen als Schlüssel und eine Liste von Funktionen als Werte übergeben:

funcs = {'number_times_listened':['sum'], 'user_id':['count']} 

einfach Dann df.groupby auf song_id Spalte verwenden:

df.groupby('song_id').agg(funcs) 

Der Ausgang:

number_times_listened user_id 
     sum count 
song_id   
ABC  25 3 
XXX  6 2 
XYZ  20 1 
+0

hat perfekt funktioniert! Danke! – jeangelj

+0

Für mein maschinelles Lernmodell brauche ich eine Kopfzeile - in diesem Szenario habe ich 3. Ich habe versucht, es innerhalb von Python ohne Erfolg zu beheben. Versuche, 2 Kopfzeilen zu löschen und habe eine behavior_df.columns = ['song_id', 'play_count_sum', 'user_id_count'] – jeangelj

0

Nicht sicher, ob dies verwandt ist, aber die Spaltennamen und das Gehäuse in Ihrem Beispiel stimmen nicht mit Ihrem Python-Code überein.

In jedem Fall sind die folgenden Werke für mich auf Python 2.7:

CSV-Datei:

record_id song_id user_id number_times_listened 
0 ABC Shjkn4987 3 
1 ABC Dsfds2347 15 
2 ABC Fkjhh9849 7 
3 XYZ Shjkn4987 20 
4 XXX Shjkn4987 5 
5 XXX Swjdh0980 1 

Python-Code:

csv_data = pd.read_csv('songs.csv') 

df = pd.pivot_table(csv_data, index='song_id', columns='user_id', values='number_times_listened', aggfunc='sum').fillna(0) 

Die resultierenden Aussehen Pivot-Tabelle wie:

user_id Dsfds2347 Fkjhh9849 Shjkn4987 Swjdh0980 
song_id 
ABC    15   7   3   0 
XXX    0   0   5   1 
XYZ    0   0   20   0 

Ist das wonach Sie suchen? Denken Sie daran, dass die Paare song_id, user_id in Ihrem Dataset eindeutig sind, sodass die Aggregatfunktion in diesem speziellen Beispiel tatsächlich nichts tut, da in diesen beiden Spalten nichts zu gruppieren ist.

+0

das ist großartig, während ich nicht suchte, gibt es mir tatsächlich so mir neue Möglichkeiten - danke – jeangelj