2017-08-06 143 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