给定一个包含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有它的功能。
答案 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