2016-05-16 165 views
0

在一個jupyter筆記本中,我有一個從不同的合併數據集創建的數據框。Python /熊貓:樞軸表

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 

我想創建由song_id透視表數據框中列出user_ids的數量和number_times_listened總和。

我知道我需要用count和sum函數創建一個for循環,但是我不能讓它工作。我也嘗試了熊貓模塊的pd.pivot_table。

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

或者類似的東西?

total_user=[] 
total_times_listened =[] 
for x in data: 
    total_user.append(sum('user_id')) 
    total_times_listened.append(count('number_times_listened')) 
return df('song_id','total_user','total_times_listened') 

回答

1

您可以通過列名作爲鍵的字典和值的函數列表:

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

輸出:

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

然後只需song_id列中使用df.groupby

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

完美工作!謝謝! – jeangelj

+0

對於我的機器學習模型,我需要有一個標題行 - 在這種情況下,我有3個。我一直試圖修復它在python中沒有成功。嘗試刪除2個標題行,並有一個行爲behavior_df.columns = ['song_id','play_count_sum','user_id_count'] – jeangelj

0

不確定這是否相關,但示例中的列名和外殼與您的Python代碼不匹配。

在任何情況下,我下面的作品上的Python 2.7:

CSV文件:

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代碼:

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) 

得到的數據透視表的外觀如:

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

這是你在找什麼?請記住,song_id,user_id對在您的數據集中是唯一的,因此在此特定示例中,聚合函數實際上沒有做任何事情,因爲在這兩列上沒有任何東西可以分組。

+0

這很好,雖然我不是在尋找這個,它實際上給了我這麼我新的機會 - 謝謝你 – jeangelj