在 pandas 多索引数据帧中重新索引子级别
Reindex sublevel in pandas multiindexed dataframe
我正在尝试在一个子级别重新索引数据框的多索引。有问题的 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 进行前向填充和填充。
使用:
- 首先由
unstack
重塑
- 添加缺失天数
reindex
- 前向填充
ffill
- 将前
NaN
替换为 fillna
- 由
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
我重新排序你的索引
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
我正在尝试在一个子级别重新索引数据框的多索引。有问题的 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 进行前向填充和填充。
使用:
- 首先由
unstack
重塑
- 添加缺失天数
reindex
- 前向填充
ffill
- 将前
NaN
替换为fillna
- 由
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
我重新排序你的索引
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