将列拆分为MultiIndex并在熊猫中丢失列
问题描述:
这与我要求的问题类似here。但是,我发现我工作的数据并不总是一致的。对于,例如说:将列拆分为MultiIndex并在熊猫中丢失列
import pandas as pd
df = pd.DataFrame(pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12]],columns=["X_a","Y_c","X_b","Y_a"]))
X_a Y_c X_b Y_a
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
现在你可以看到X
没有对应c
列,Y
没有相应b
列。现在,当我想创建多级索引,我想数据框看起来像这样:
X Y
a b c a b c
0 1 3 -1 4 -1 2
1 5 7 -1 8 -1 6
2 9 11 -1 12 -1 10
因此,大家可以看到,我想以这样的方式,所有的上层列应有的断续同样的较低级别的列。由于数据集是正确的,我正在考虑用-1填充缺失的列,尽管我对此有所建议。我发现我的问题最接近的是this answer。但是,我无法像在我之前的问题中那样以某种方式使用MultiLevel Index。任何帮助表示赞赏。
答
创建MultiIndex
并设置df.columns
。
idx = df.columns.str.split('_', expand=True)
idx
MultiIndex(levels=[['X', 'Y'], ['a', 'b', 'c']],
labels=[[0, 1, 0, 1], [0, 2, 1, 0]])
df.columns = idx
现在,与现有MultiIndex
,创建新的索引,并用它来reindex
原件。
idx = pd.MultiIndex.from_product([idx.levels[0], idx.levels[1]])
idx
MultiIndex(levels=[['X', 'Y'], ['a', 'b', 'c']],
labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])
df.reindex(columns=idx, fill_value=-1)
X Y
a b c a b c
0 1 3 -1 4 -1 2
1 5 7 -1 8 -1 6
2 9 11 -1 12 -1 10