【问题标题】:Reindex sublevel in pandas multiindexed dataframe在熊猫多索引数据框中重新索引子级别
【发布时间】:2018-08-24 09:48:28
【问题描述】:

我正在尝试在一个子级别重新索引数据框的多索引。有问题的 df 如下所示:

test = pd.DataFrame({
  'day':[1,3,5],
  'position':['A', 'B', 'A'],
  'value':[20, 45, 3] 
})
test.set_index(['day', 'position'])

>>                  value
  day   position
   1      A          20
   3      B          45
   5      A          3

我的目标是重新索引day 级别以将数据框转换为以下内容:

>>>
              value
day position    
 1    A       20.0
 2    A       20.0
 3    A       20.0
 4    A       20.0
 5    A       3.0
 1    B       0.0
 2    B       0.0
 3    B       45.0
 4    B       45.0
 5    B       45.0

所以基本上我需要为每个职位组将 day 重新索引到第 1 天到第 5 天,然后用 0 向前填充和填充。

【问题讨论】:

    标签: python pandas multi-index reindex


    【解决方案1】:

    用途:


    df = (test.set_index(['day', 'position'])
              .unstack()
              .reindex(range(1,6))
              .ffill()
              .fillna(0)
              .stack()
              .sort_index(level=[1,0]))
    print (df)
                  value
    day position       
    1   A          20.0
    2   A          20.0
    3   A          20.0
    4   A          20.0
    5   A           3.0
    1   B           0.0
    2   B           0.0
    3   B          45.0
    4   B          45.0
    5   B          45.0
    

    【讨论】:

    • 你这个美丽的天才生物。谢谢你:)
    • @Nico - 你的问题很好,回答很重要;)
    【解决方案2】:

    我重新排序你的索引

    test.set_index(['position', 'day']).reindex(pd.MultiIndex.from_product([['A','B'],list(range(1,6))])).sort_index().groupby(level=0).ffill().fillna(0)
    Out[30]: 
         value
    A 1   20.0
      2   20.0
      3   20.0
      4   20.0
      5    3.0
    B 1    0.0
      2    0.0
      3   45.0
      4   45.0
      5   45.0
    

    【讨论】:

      猜你喜欢
      • 2013-12-04
      • 2016-06-13
      • 2015-02-22
      • 2017-09-21
      • 1970-01-01
      • 2021-09-27
      • 2017-12-14
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多