我正在尝试将数据帧的多索引重新索引到一个子级别。有问题的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天,然后将转发和fillna重新索引为0。
答案 0 :(得分:2)
使用:
unstack
reindex
ffill
fillna
NaN
stack
sort_index
预期输出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
答案 1 :(得分:1)
我重新排序你的索引
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