在多索引数据框架中重新索引子级

2024-03-28 11:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在一个子级重新索引数据帧的多索引。所讨论的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向前填充和填充。你知道吗


Tags: 数据test目标dataframedfindexvalue职位
2条回答

用途:

  • 首先通过^{}重塑形状
  • ^{}添加错误天数
  • 向前填充ffill
  • ^{}替换第一个NaNs
  • ^{}重塑形状
  • ^{}表示预期输出

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

我重新排列你的索引

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

相关问题 更多 >