【问题标题】:DataFrame - Insert an additional level_0 index from SeriesDataFrame - 从 Series 中插入一个额外的 level_0 索引
【发布时间】:2019-10-29 06:58:15
【问题描述】:

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

细节和例子: 1-每位患者有一个周期元素。 2-每个病人都有不同数量的笔记,所以我不能重复固定的 n_times 每个周期元素。 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 中患者的唯一值相同?
  • 是的,一对一的通信。而你下面的答案正是我所需要的。非常感谢。

标签: python pandas dataframe indexing


【解决方案1】:

如果period 中的值数量与df1patient 的唯一值相同,则可以使用:

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

【讨论】:

    【解决方案2】:
    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'])
    

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 2016-02-28
      • 1970-01-01
      • 2018-08-22
      • 2017-01-14
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多