Python 如何强制第二级多索引的值?
给予 我想将第二个多索引级别“2”的所有值设置为我选择的值,在本例中,设置为Python 如何强制第二级多索引的值?,python,pandas,Python,Pandas,给予 我想将第二个多索引级别“2”的所有值设置为我选择的值,在本例中,设置为np.arange(start=1,stop=len(df)+1) 我的尝试 col one two a e val f val b g val h val a e val f val g val col 给予 而不是 one two a 1 val 2
np.arange(start=1,stop=len(df)+1)
我的尝试
col
one two
a e val
f val
b g val
h val
a e val
f val
g val
col
给予
而不是
one two
a 1 val
2 val
b 3 val
4 val
a 1 val
2 val
3 val
我认为您需要重新创建
MultiIndex
,因为set\u levels
仅由level的唯一值设置,因此在您的解决方案中仅替换第二级的4个值:
one two
a 1 val
2 val
b 3 val
4 val
a 5 val
6 val
7 val
另一个想法是:
print(df.index.levels)
[['a', 'b'], ['e', 'f', 'g', 'h']]
a = df.index.get_level_values(0)
b = np.arange(start=1, stop=len(df)+1)
df.index = pd.MultiIndex.from_arrays([a, b], names=['one','two'])
print (df)
col
one two
a 1 val
2 val
b 3 val
4 val
a 5 val
6 val
7 val
one two
a 1 val
2 val
b 3 val
4 val
a 5 val
6 val
7 val
print(df.index.levels)
[['a', 'b'], ['e', 'f', 'g', 'h']]
a = df.index.get_level_values(0)
b = np.arange(start=1, stop=len(df)+1)
df.index = pd.MultiIndex.from_arrays([a, b], names=['one','two'])
print (df)
col
one two
a 1 val
2 val
b 3 val
4 val
a 5 val
6 val
7 val
df = df.reset_index(level=1).assign(two = b).set_index('two', append=True)
print (df)
col
one two
a 1 val
2 val
b 3 val
4 val
a 5 val
6 val
7 val