【发布时间】:2021-01-31 14:36:41
【问题描述】:
我有一个这样的 DataFrame:
import pandas as pd
df = pd.DataFrame.from_dict({'var1': {0: 0.0,
1: 0.0,
2: 0.0,
3: 0.0,
4: 0.0,
6: 0.0,
7: 0.0,
8: 0.0,
10: 0.0},
'var2': {0: 0.0,
1: 0.0,
2: 0.0,
3: 0.0,
4: 0.0,
6: 0.0,
7: 0.0,
8: 0.0,
10: 0.0},
'var3': {0: 0.0,
1: 0.0,
2: 0.0,
3: 0.0,
4: 0.0,
6: 0.0,
7: 0.0,
8: 0.0,
10: 0.0},
'var4': {0: 0.0,
1: 0.0,
2: 0.0,
3: 0.0,
4: 0.0,
6: 0.0,
7: 0.0,
8: 0.0,
10: 0.0}})
我想填补缺失的索引,所以我首先使用了.reindex:
df.reindex(np.arange(1, 11))
我得到了:
var1 var2 var3 var4
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0
4 0.0 0.0 0.0 0.0
5 NaN NaN NaN NaN
6 0.0 0.0 0.0 0.0
7 0.0 0.0 0.0 0.0
8 0.0 0.0 0.0 0.0
9 NaN NaN NaN NaN
10 0.0 0.0 0.0 0.0
但是,我需要跟踪多个索引,当我尝试构建 MultiIndex 并将其传递给 .reindex 时,它并没有像我预期的那样工作:
df.reindex(pd.MultiIndex.from_product([["A"], np.arange(1, 11)]))
var1 var2 var3 var4
A 1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN
6 NaN NaN NaN NaN
7 NaN NaN NaN NaN
8 NaN NaN NaN NaN
9 NaN NaN NaN NaN
10 NaN NaN NaN NaN
我真的不明白这里发生了什么,.reindex 的文档对我来说不是很清楚。有人可以就此提出建议并告诉我为什么不能将 MultiIndex 传递给 .reindex 或者我做错了什么?
@编辑:
@jazrael 在我们从 1 级到 2 级 MultiIndex 时提供了一个很好的解决方案。但是,如果我们想从 2-level MultiIndex 重新索引到 3-level MultiIndex,该怎么办?
例如:
df.index = pd.MultiIndex.from_arrays([np.repeat([1, 2], [4, 5]), df.index])
var1 var2 var3 var4
1 0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0
2 4 0.0 0.0 0.0 0.0
6 0.0 0.0 0.0 0.0
7 0.0 0.0 0.0 0.0
8 0.0 0.0 0.0 0.0
10 0.0 0.0 0.0 0.0
我想得到:
var1 var2 var3 var4
A 1 0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0
2 4 0.0 0.0 0.0 0.0
5 NaN NaN NaN NaN
6 0.0 0.0 0.0 0.0
7 0.0 0.0 0.0 0.0
8 0.0 0.0 0.0 0.0
9 NaN NaN NaN NaN
10 0.0 0.0 0.0 0.0
【问题讨论】:
-
这个额外级别的重新索引的最终用途是什么?是因为你要连接几个数据框吗?
-
@Ben.T 是的。我需要跟踪当前处理的子集以便稍后将它们连接起来。
-
如果您使用
pd.concat进行连接,您可以使用字典或keys参数来跟踪您放入连接的Frame or Series对象。
标签: python pandas indexing multi-index