2017-08-06 207 views
3

如何在一列中的變量名稱中拆分pandas DataFrame中的列? 我有以下數據框:在Python中分割大熊貓熊貓數據框

ID FEATURE PARAM VALUE 
0 A101 U1 ITEM1 10 
1 A101 U1 ITEM2 11 
2 A101 U2 ITEM1 12 
3 A101 U2 ITEM2 13 
4 A102 U1 ITEM1 14 
5 A102 U1 ITEM2 15 
6 A102 U2 ITEM1 16 
7 A102 U2 ITEM2 17 

我想如下拆呢。

ID FEATURE ITEM1 ITEM2 
0 A101 U1 10 11 
1 A101 U2 12 13 
2 A102 U1 14 15 
3 A102 U2 16 17 

我試圖使用其中一個響應,它的效果很好但部分。

Select_Data.groupby('PARAM')['VALUE'].apply(list).apply(pd.Series).T 

PARAM ITEM1 ITEM2 
0 10 11 
1 12 13 
2 14 15 
3 16 17 

但我失去了我的ID &專題欄目,我想,讓他們在表格中。我將不勝感激任何建議。

+0

我的答案是你在找什麼? – Dark

+0

嗨Bharath,是的,你的答案爲我工作。非常感謝你。對此,我真的非常感激。 – rverma

回答

1

您還可以使用pivot_table索引ID,FEATURE,然後重置指數即

ndf = pd.pivot_table(df,columns='PARAM', values='VALUE',index=['ID','FEATURE']).reset_index() 

櫃面你想要聚合重複值,那麼你可以使用平均值

ndf = pd.pivot_table(df,columns='PARAM', values='VALUE',index=['ID','FEATURE'],aggfunc='mean').reset_index() 

輸出:

 
PARAM ID FEATURE ITEM1 ITEM2 
0  A101  U1  10  11 
1  A101  U2  12  13 
2  A102  U1  14  15 
3  A102  U2  16  17 
In [528]: 

+0

非常感謝Bharath。你的答案適合我。 – rverma

+0

做upvote如果你喜歡這個解決方案。謝謝 – Dark

1

使用groupby可以

In [566]: df.groupby('c1')['c2'].apply(list).apply(pd.Series).T 
Out[566]: 
c1 A B C 
0 1 2 3 
1 4 5 6 
+0

真棒和簡單 – Dark

+0

太棒了。非常感謝。對此,我真的非常感激。 – rverma

1

您可以使用set_indexunstack

df = df.set_index(['ID','FEATURE','PARAM'])['VALUE'] 
     .unstack() 
     .reset_index() 
     .rename_axis(None, axis=1) 
print (df) 
    ID FEATURE ITEM1 ITEM2 
0 A101  U1  10  11 
1 A101  U2  12  13 
2 A102  U1  14  15 
3 A102  U2  16  17 

但如果得到:

ValueError: Index contains duplicate entries, cannot reshape

然後用Bharath shetty's solutiongroupby和聚集mean,因爲三元ID,FEATURE,PARAM重複:

print (df) 
    ID FEATURE PARAM VALUE 
0 A101  U2 ITEM1  50<-same A101,U2,ITEM1 
1 A101  U1 ITEM2  11 
2 A101  U2 ITEM1  12<-same A101,U2,ITEM1 
3 A101  U2 ITEM2  13 
4 A102  U1 ITEM1  14 
5 A102  U1 ITEM2  15 
6 A102  U2 ITEM1  16 
7 A102  U2 ITEM2  17 


df = df.groupby(['ID','FEATURE','PARAM'])['VALUE'].mean() 
     .unstack().reset_index().rename_axis(None, axis=1) 
print (df) 
    ID FEATURE ITEM1 ITEM2 
0 A101  U1 NaN 11.0 
1 A101  U2 31.0 13.0<-(50+12)/2=31 
2 A102  U1 14.0 15.0 
3 A102  U2 16.0 17.0