2017-06-22 66 views
3

行我是新來的大熊貓,熊貓:轉換列基於ID

我有以下數據框:

df = pd.DataFrame([[1, 'name', 'peter'], [1, 'age', 23], [1, 'height', '185cm']], columns=['id', 'column','value'])

id column value 
0 1 name peter 
1 1 age  23 
2 1 height 185cm 

我需要創建一個單獨的行,每個ID 。像這樣:

id name age height 
0 1 peter 23 185cm 

任何幫助非常感謝,謝謝。

+2

歡迎來到StackOverflow。請花時間閱讀這篇文章[如何提供一個偉大的熊貓示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)以及如何提供[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)並相應地修改您的問題。 [如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)上的這些技巧也可能有用。 – jezrael

+1

此外[不要張貼圖像的代碼(或鏈接到他們)](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-所以當提問時) – jezrael

+0

對不起,我沒有足夠的聲望來嵌入圖像 – pandalover

回答

3

您可以使用pivot_table與骨料join

df = pd.DataFrame([[1, 'name', 'peter'], 
        [1, 'age', 23], 
        [1, 'height', '185cm'], 
        [1, 'age', 25]], columns=['id', 'column','value']) 
print (df) 
    id column value 
0 1 name peter 
1 1  age  23 
2 1 height 185cm 
3 1  age  25 

df1 = df.astype(str).pivot_table(index="id",columns="column",values="value",aggfunc=','.join) 
print (df1) 
    column age height name 
id       
1  23,25 185cm peter 

groupby + apply另一種解決方案加入和unstack

df1 = df.astype(str).groupby(["id","column"])["value"].apply(','.join).unstack(fill_value=0) 
print (df1) 
column age height name 
id       
1  23,25 185cm peter 
+0

非常感謝您,現在工作! – pandalover

+0

如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067) - 點擊答案旁邊的複選標記('✓')將其從灰色填充。謝謝。 – jezrael

0

假設你的數據幀爲 「DF」,下面一行將有助於:

df.pivot(指數= 「主題」,列= 「謂詞」,值= 「對象」)