【问题标题】:DataFrame flattening to columnsDataFrame 展平为列
【发布时间】:2017-05-05 21:53:53
【问题描述】:

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

【问题讨论】:

  • 请详细说明。你可以举一个你想做的例子。此外,您还可以详细说明您想在此处应用的操作,以及如何完成。
  • 显示你当前的迭代和输出。

标签: python pandas dataframe


【解决方案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

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

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

【讨论】:

  • 这正是我想要的。我知道索引/列的构造。
猜你喜欢
  • 2021-05-07
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2018-09-24
  • 2019-11-05
  • 2018-09-02
相关资源
最近更新 更多