【发布时间】:2019-05-26 20:21:00
【问题描述】:
我创建了一个如下所示的数据框:
df=
id var0 var1 var2 var3 var4 ... var137
5171 10.0 2.8 0.0 5.0 1.0 ... 9.4
5171 40.9 2.5 3.4 4.5 1.3 ... 7.7
5171 60.7 3.1 5.2 6.6 3.4 ... 1.0
...
5171 0.5 1.3 5.1 0.5 0.2 ... 0.4
4567 1.5 2.0 1.0 4.5 0.1 ... 0.4
4567 4.4 2.0 1.3 6.4 0.1 ... 3.3
4567 6.3 3.0 1.5 7.6 1.6 ... 1.6
...
4567 0.7 1.4 1.4 0.3 4.2 ... 1.7
...
9584 0.3 2.6 0.0 5.2 1.6 ... 9.7
9584 0.5 1.2 8.3 3.4 1.3 ... 1.7
9584 0.7 3.0 5.6 6.6 3.0 ... 1.0
...
9584 0.7 1.3 0.1 0.0 2.0 ... 1.7
id 级别共有 58 项。我需要添加一个新的级别,让我们调用 id uniq_id 到这个数据框,以便最终结果如下:
df=
uniq_id id var0 var1 var2 var3 var4 ... var137
0 5171 10.0 2.8 0.0 5.0 1.0 ... 9.4
1 5171 40.9 2.5 3.4 4.5 1.3 ... 7.7
2 5171 60.7 3.1 5.2 6.6 3.4 ... 1.0
...
57 5171 0.5 1.3 5.1 0.5 0.2 ... 0.4
0 4567 1.5 2.0 1.0 4.5 0.1 ... 0.4
1 4567 4.4 2.0 1.3 6.4 0.1 ... 3.3
2 4567 6.3 3.0 1.5 7.6 1.6 ... 1.6
...
57 4567 0.7 1.4 1.4 0.3 4.2 ... 1.7
...
0 9584 0.3 2.6 0.0 5.2 1.6 ... 9.7
1 9584 0.5 1.2 8.3 3.4 1.3 ... 1.7
2 9584 0.7 3.0 5.6 6.6 3.0 ... 1.0
...
57 9584 0.7 1.3 0.1 0.0 2.0 ... 1.7
我试过了:
n_t = range(0,58)
pd.concat([df], keys=n, names=['uniq_id'])
但这会将uniq_id 的所有值加0。我还尝试基于此post 创建一个空的multiindex,然后为每个id 获取部分数据帧并将其添加到此multiIndex 中,但我失败了。我该如何解决?
【问题讨论】:
-
累积计数能解决您的问题吗?
df['uniq_id'] = df.groupby('id').cumcount() -
行数总是58的倍数吗?
-
我认为@Jondiedoop 应该是一个答案
-
@Jondiedoop 将新列添加到数据框中。我需要向它添加一个新的索引/级别
-
@Birish,我已尝试编辑答案以解决此问题并将其设为索引
标签: python pandas dataframe multi-index