2015-09-08 27 views
1

我有下面的數據框。如何在pandas&R中沒有任何聚合的情況下轉置數據幀?

user_id item_id rank 
user1 item4 1 
user1 item2 2 
user1 item5 3 
user1 item1 4 
user1 item3 5 
user2 item5 1 
user2 item3 2 
user2 item4 3 
user2 item1 4 
user2 item2 5 

如何重塑在兩個R &大熊貓下面的格式?

user_id rank1 rank2 rank3 rank4 rank5 
user1 item4 item2 item5 item1 item3 
user2 item5 item3 item4 item1 item2 

我發現轉置特別是在R棘手。任何優雅的標準功能/方式一直工作?

回答

4

我們可以在R使用dcastlibrary(reshape2)到「長」格式轉換爲「寬」格式

library(reshape2) 
dcast(df1, user_id~paste0('rank', rank), value.var='item_id') 
# user_id rank1 rank2 rank3 rank4 rank5 
#1 user1 item4 item2 item5 item1 item3 
#2 user2 item5 item3 item4 item1 item2 
+0

如果我想總結value.var的值,dcast仍然有效嗎?如何指定聚合函數? –

+0

@ mrcet007您可以指定'fun.aggregate',即'dcast(df1,user_id〜paste0('rank',rank),value.var ='item_id',sum)'。在這個例子中,'item_id'是'character',所以它不起作用。 – akrun

1

在嘗試用熊貓支點。例如(將數據保存到'data.txt'後)

import pandas as pd 

df = pd.read_table('data.txt', delim_whitespace=True) 

df.pivot(index='user_id', columns='rank', values='item_id') 
+0

謝謝我試過pivot_table(),並得到錯誤說不能聚合。兩者有什麼區別? –

+0

當運行與pivot()的代碼時我得到下面的錯誤「索引包含重複的條目,不能重塑」 –

+0

「pivot」使用默認的聚合「均值」,因此不會在文本列上工作。 – Patthebug

相關問題