Python熊猫:转置还是堆叠?

时间:2015-08-10 02:08:36

标签: python pandas

您好我在下面有一个示例数据框。我无法通过转置获得所需的结果....

static MyCheckBox ()
{
    DefaultStyleKeyProperty.OverrideMetadata (typeof (MyCheckBox), new FrameworkPropertyMetadata (typeof (MyCheckBox)));
}

一个简单的df.transpose()产生......

x = ('P', 'P', 'O', 'DNP', 'D')
y = ('O', 'O', 'D', 'DNP', 'DNP')
z = ('P', 'P', 'O', 'U', 'DNP')
a = ('O', 'O', 'D', 'DNP', 'DNP')
b = ('P', 'DNP', 'O', 'U', 'DNP')
ID = ['ID1', 'ID2', 'ID3', 'ID4', 'ID5']
df = DataFrame(zip(ID, a, b, x, y, z), columns = ['id', 'a', 'b', 'x', 'y', 'z'])

    id    a    b    x    y    z
0  ID1    O    P    P    O    P
1  ID2    O  DNP    P    O    P
2  ID3    D    O    O    D    O
3  ID4  DNP    U  DNP  DNP    U
4  ID5  DNP  DNP    D  DNP  DNP

所需的输出如下....

0    1    2    3    4
id  ID1  ID2  ID3  ID4  ID5
a     O    O    D  DNP  DNP
b     P  DNP    O    U  DNP
x     P    P    O  DNP    D
y     O    O    D  DNP  DNP
z     P    P    O    U  DNP

依此类推.....我感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用pd.melt

id

或者,您也可以在调用stack之前将In [21]: df.set_index('id').stack() Out[21]: id ID1 a O b P x P y O z P ... ID5 a DNP b DNP x D y DNP z DNP dtype: object 设置为索引:

stack

id将列级值移动到索引中。由于期望的结果 索引中也有id个值,使用set_index移动是很自然的 首先将stack列放入索引,然后调用In [164]: df.columns.name = 'colvals' In [165]: df.set_index('id').stack().reset_index() Out[165]: id colvals 0 0 ID1 a O 1 ID1 b P 2 ID1 x P 3 ID1 y O 4 ID1 z P ... 20 ID5 a DNP 21 ID5 b DNP 22 ID5 x D 23 ID5 y DNP 24 ID5 z DNP

调用reset_index将索引级别移动到DataFrame列中:

{{1}}