DataFrame展平为列

时间:2017-05-05 11:32:31

标签: python pandas dataframe

给定一个包含2列和5个条目的pandas数据帧:

    A       B
1  0.1     0.01 
2  0.2     0.02
3  0.3     0.03
4  0.4     0.04
5  0.5     0.05

有没有办法“投射”'列上的索引维度?我的意思是指一个操作会产生一个带有标签A_1,A_2,... A_5,B_1,... B_5的系列。

         vals
A_1       0.1
A_2       0.2
A_3       0.3
A_4       0.4
A_5       0.5
B_1      0.01
B_2      0.02
B_3      0.03
B_4      0.04
B_5      0.05

我已经找到了一种迭代方法,但我很确定pandas有它的功能。

1 个答案:

答案 0 :(得分:1)

df.stack()会帮助你完成大部分工作,但如果你想获得那些精确的指数('A_1','A_2'等),你需要做一些索引操作

s = df.stack()

这给出了系列:

0  A    0.998446
   B    0.847224
1  A    0.776747
   B    0.863142
2  A    0.343800
   B    0.056423
3  A    0.194158
   B    0.178408
4  A    0.488775
   B    0.019145

然后,您可以从multiindex(作为元组)获取值,并将它们转换为您想要的格式,如下所示:

new_index = ['_'.join((i[1], str(i[0]+1))) for i in  s.index.get_values()]

这会翻转每个元组中的第一个和第二个值,将整数加1(因为索引通常从0开始)并使用下划线连接元组。

然后,您可以将此列表指定为新索引,并按索引对系列进行排序,以获得您指定的顺序。

s.index = new_index  
s = s.sort_index()

这导致系列s

A_1    0.998446
A_2    0.776747
A_3    0.343800
A_4    0.194158
A_5    0.488775
B_1    0.847224
B_2    0.863142
B_3    0.056423
B_4    0.178408
B_5    0.019145