2017-06-19 42 views
1

我问过类似的问题,有一天用数据来自两列:通过唯一值分组而调换列

Grouping columns by unique values in Python

现在我有三列。他们需要按列A分组,列B作为标题值,列C正确排序。

我的数据帧的样子:

A B C 
25115 20 45 
25115 30 154 
25115 40 87 
25115 70 21 
25115 90 74 
26200 10 48 
26200 20 414 
26200 40 21 
26200 50 288 
26200 80 174 
26200 90 54 

但我需要这个来结束:

 10 20 30 40 50 70 80 90 
25115  45 154 87  21  74 
26200 48 414  21 288  174 54 

这得到C列的值,而与B列作为行名称。

import pandas as pd 
df = pd.DataFrame({'A':[25115,25115,25115,25115,25115,26200,26200,26200,26200,26200,26200],'B':[20,30,40,70,90,10,20,40,50,80,90],'C':[45,154,87,21,74,48,414,21,288,174,54]}) 
a = df.groupby('A')['C'].apply(lambda x:' '.join(x.astype(str))) 

任何想法将不胜感激。

+0

这么几件事情,好像你所做的就是复制别人在前面的例子中规定的两列,甚至没有修改代码第二,许多人在该主题中给了你很好的答案,并且似乎你正在使用其中的一些答案,但是你没有接受他们的答案是正确的。 –

回答

1
  • 选项1:

使用pivot_table:

df.pivot_table(values='C',index='A',columns='B') 

输出

B  10  20  30 40  50 70  80 90 
A               
25115 NaN 45.0 154.0 87.0 NaN 21.0 NaN 74.0 
26200 48.0 414.0 NaN 21.0 288.0 NaN 174.0 54.0 
  • 选项2:

使用set_index /拆散:

df.set_index(['A','B'])['C'].unstack() 

输出:

B  10  20  30 40  50 70  80 90 
A               
25115 NaN 45.0 154.0 87.0 NaN 21.0 NaN 74.0 
26200 48.0 414.0 NaN 21.0 288.0 NaN 174.0 54.0 
+0

非常感谢! –