我有一个这样的DataFrame:
df = pd.DataFrame([100,200,300], [1,1,2])
0
1 100
1 200
2 300我想添加一个二级索引(MultiIndex),如下所示:
0
index i2
1 0 100
1 200
2 0 300也就是说,我希望二级索引(在这里称为i2)为零,其中df.duplicated()为False (意味着索引与上面的索引不相同),并且是其他行的顺序编号。
一般的想法是采用一个有重复的索引,并通过引入一个从零开始的额外的索引级别,使其不再具有重复的索引,并且只在需要时递增,以使完整的索引对每一行都是唯一的。
解决方案应该使用NumPy或Pandas函数,而不是Python循环,也就是说,应该将其向量化。
发布于 2017-07-31 06:39:30
我认为您可以使用cumcount (首先使用Series或DataFrame,所以首先使用Index.to_series或Series构造函数)和MultiIndex.from_arrays。
s = df.index.to_series()
#alternative solution
#s = pd.Series(df.index)
s = s.groupby(s).cumcount()
df.index = pd.MultiIndex.from_arrays([df.index, s], names=['index','i2'])
print (df)
0
index i2
1 0 100
1 200
2 0 300df.index = pd.MultiIndex.from_arrays([df.index, df.groupby(df.index).cumcount()],
names=['index','i2'])
print (df)
0
index i2
1 0 100
1 200
2 0 300df.index = pd.MultiIndex.from_arrays([df.index, df.groupby(level=0).cumcount()],
names=['index','i2'])
print (df)
0
index i2
1 0 100
1 200
2 0 300https://stackoverflow.com/questions/45408952
复制相似问题