Python 向数据帧添加新级别
我创建了一个数据框架,如下所示:Python 向数据帧添加新级别,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我创建了一个数据框架,如下所示: 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
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
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
共有58项id
级别。我需要添加一个新的级别,让我们调用iduniq\u id
到此数据帧,以便最终结果如下:
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
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\u id的所有值加上0。我还试图在此基础上创建一个空的多索引
,然后为每个id
获取部分数据帧,并将其添加到这个多索引
中,但失败了。我怎样才能修好它 您描述了一个:
您可以通过以下方式将其添加到索引中:
df.set_index(['id', 'uniq_id']) # If id was a Series
或者如果id
已经是索引:
df.set_index('uniq_id', append=True) # If id was already an Index
这将为您提供一个多索引:
输出:
你描述了一个:
您可以通过以下方式将其添加到索引中:
df.set_index(['id', 'uniq_id']) # If id was a Series
或者如果id
已经是索引:
df.set_index('uniq_id', append=True) # If id was already an Index
这将为您提供一个多索引:
输出:
累积计数能解决您的问题吗
df['uniq_id']=df.groupby('id').cumcount()
行数总是58的倍数吗?我认为@Jondiedoop应该是answer@Jondiedoop这将向数据帧添加一个新列。我需要添加一个新的索引/级别it@Birish,我已尝试编辑我的答案以解决此问题,并将其设为索引。累积计数可以解决您的问题吗df['uniq_id']=df.groupby('id').cumcount()
行数总是58的倍数吗?我认为@Jondiedoop应该是answer@Jondiedoop这将向数据帧添加一个新列。我需要添加一个新的索引/级别it@Birish,我试图编辑我的答案来解决这个问题,并将其作为索引