Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何强制第二级多索引的值?_Python_Pandas - Fatal编程技术网

Python 如何强制第二级多索引的值?

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

给予

我想将第二个多索引级别“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