【问题标题】:Add multi-index to pandas dataframe and keep current index向 pandas 数据框添加多索引并保留当前索引
【发布时间】:2013-12-03 19:37:59
【问题描述】:

我正在尝试合并来自不同参与者的时间课程数据。我迭代地为每个参与者提取一个数据帧,并在循环结束时将它们连接起来。在连接之前,我想将参与者的 ID 添加到附加索引中。

这看起来真的很简单,但我在这个问题上找不到任何东西:(

我想转这个

    col
0     1
1   1.1
2   NaN

进入:

          col
ID    0     1
      1   1.1
      2   NaN

我知道我可以创建一个新索引,例如:

multindex = [np.array(ID*len(data)),np.array(np.arange(len(data)))]

但这很不雅,而且 - 看到我在半小时以上的高频测量 - 甚至会变得有点慢:/

我想提一下,我最近发现我的问题与this other question 重复。然而,我的显然有更多的赞成票和更好的答案。 “Prepend”显然没有吸引那么多点击。

【问题讨论】:

  • 最好将 ID 添加为列,然后在 concat 时添加到索引?
  • 安迪,这确实也是duplicate 中给出的答案。在我看来,这比这里接受的答案更好。

标签: python pandas dataframe multi-index


【解决方案1】:

也许你可以使用concatkeys 参数:

import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.random.rand(3, 2))
df2 = pd.DataFrame(np.random.rand(4, 2))
df3 = pd.DataFrame(np.random.rand(5, 2))

print pd.concat([df1, df2, df3], keys=["A", "B", "C"])

输出:

            0         1
A 0  0.863774  0.794880
  1  0.578503  0.418619
  2  0.215317  0.146167
B 0  0.655829  0.116917
  1  0.862316  0.812847
  2  0.500126  0.689218
  3  0.653439  0.270427
C 0  0.825213  0.882963
  1  0.579436  0.332047
  2  0.456948  0.718893
  3  0.795074  0.826773
  4  0.049676  0.697471

如果您想稍后附加其他数据帧:

df4 = pd.DataFrame(np.random.rand(6, 2))
pd.concat([df, pd.concat([df4], keys=["D"])])

【讨论】:

  • 虽然键有时很有用,但我认为这并不能真正回答问题。这样之后就不能再进行一次 concat 了,这个问题似乎暗示这是必要的。所以,例如在完成上述操作后,我看不出您如何轻松地将 df4 = pd.DataFrame(np.random.rand(3,2)) 附加到新密钥 "D" 上。 This answer 似乎更适合这个目的。
猜你喜欢
  • 2018-08-24
  • 2020-03-12
  • 2019-02-06
  • 2019-07-18
  • 2020-06-02
  • 2018-12-06
  • 2013-04-11
  • 2014-09-01
  • 2020-10-22
相关资源
最近更新 更多