转置列时按唯一值分组

时间:2017-06-19 15:48:03

标签: python python-2.7 pandas

前几天我用两列数据问了一个类似的问题:

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)))

任何想法都会受到最高的赞赏。

1 个答案:

答案 0 :(得分:4)

  • 选项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 / unstack:

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