Python DataFrame-从系列中插入额外的级别0索引

Python DataFrame-从系列中插入额外的级别0索引,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我有一个多索引数据帧,需要插入一个新列,该列的数据量与0级索引相同 详细信息和示例: 1-每个患者有一个周期元素。 2-每个患者都有不同数量的笔记,因此我不能重复每个周期元素的固定n_次。 3-我需要同一数据框中的所有数据 我希望这个例子能增加足够的清晰度 patient note_number info 1 1 bla 1 2 bla 1 3 bla 2 4 bla

我有一个多索引数据帧,需要插入一个新列,该列的数据量与0级索引相同

详细信息和示例: 1-每个患者有一个周期元素。 2-每个患者都有不同数量的笔记,因此我不能重复每个周期元素的固定n_次。 3-我需要同一数据框中的所有数据

我希望这个例子能增加足够的清晰度

patient note_number info 
1          1        bla
1          2        bla
1          3        bla
2          4        bla
2          5        bla
3          6        bla
3          7        bla

period (each for one particular patient)
5 days
3 days
11 days

I have this multiindexed dataframe:
patient note_number info 
1          1        bla
           2        bla
           3        bla
2          4        bla
           5        bla
3          6        bla
           7        bla

I need something like:
patient period note_number info 
1        5 days   1        bla
                  2        bla
                  3        bla
2        3 days   4        bla
                  5        bla
3        11 days  6        bla
                  7        bla
我怎样才能完成类似的事情?需要对应。第一个周期元素必须与第一个患者配对,依此类推。
谢谢

如果
期间
中的值数量与
df1
中患者的唯一值相同,则可以使用:

idx = df.index.get_level_values(0)

df2.index = idx.unique()
print (df2)
          period
patient         
1         5 days
2         3 days
3        11 days

df = (df.assign(period = idx.map(df2['period']))
        .set_index('period', append=True)
        .reorder_levels([0,2,1]))
print (df)
                            info
patient period  note_number     
1       5 days  1            bla
                2            bla
                3            bla
2       3 days  4            bla
                5            bla
3       11 days 6            bla
                7            bla
使用字典为每个患者创建映射

重置索引


周期中的值数是否与df1中患者的唯一值相同?是的,一对一对应。你下面的答案正是我需要的。谢谢。
first need to reset the index, assuming df is your dataframe, below will work
df = df.reset_index(drop=False)
my_dict = {1:'5 days',2:'3 days',3:'11 days'}

df['period'] = df['patient'].map(my_dict)
df = df.set_index(['patient','period','note_number'])