首页 > 解决方案 > 为 MultiIndex 中的每个唯一元素重复 DataFrame 的索引

问题描述

我正在寻找一种方法,可以为给定的 MultiIndex 唯一元素重复索引的每个元素。

因此,假设我使用以下代码仅使用索引创建一个空数据:

df_x1 = pd.DataFrame({'x1':np.linspace(1,4,4)}) 
df = pd.DataFrame(index = df_x1['x1'].values)

现在,我想使用以下数据创建多级索引:

df_x2 = pd.DataFrame({'x2': np.linspace(0,2,3)})

之后,我想为 df_x2 的每个唯一元素,将 df_x1 中的所有索引设置为 df_2 的子索引。所以,最后,我希望有一个空数据框,其结果类似于以下内容:


0  1
   2
   3
   4
1  1
   2
   3
   4
2  1
   2
   3
   4

标签: pythonpandas

解决方案


我认为您需要MultiIndex.from_product所有MultiIndex组合:

mux = pd.MultiIndex.from_product([df_x2['x2'], df.index])
print (mux)
MultiIndex([(0.0, 1.0),
            (0.0, 2.0),
            (0.0, 3.0),
            (0.0, 4.0),
            (1.0, 1.0),
            (1.0, 2.0),
            (1.0, 3.0),
            (1.0, 4.0),
            (2.0, 1.0),
            (2.0, 2.0),
            (2.0, 3.0),
            (2.0, 4.0)],
           )

然后传递给DataFrame构造函数:

df2 = pd.DataFrame(index=mux)

或者,如果数据df不为空并且需要重复行添加DataFrame.reindex

df2 = df.reindex(mux, level=1)
print (df2)
Empty DataFrame
Columns: []
Index: [(0.0, 1.0), (0.0, 2.0), (0.0, 3.0), (0.0, 4.0), (1.0, 1.0), 
        (1.0, 2.0), (1.0, 3.0), (1.0, 4.0), (2.0, 1.0), (2.0, 2.0), 
        (2.0, 3.0), (2.0, 4.0)]

print (df2.index)
MultiIndex([(0.0, 1.0),
            (0.0, 2.0),
            (0.0, 3.0),
            (0.0, 4.0),
            (1.0, 1.0),
            (1.0, 2.0),
            (1.0, 3.0),
            (1.0, 4.0),
            (2.0, 1.0),
            (2.0, 2.0),
            (2.0, 3.0),
            (2.0, 4.0)],
           )

推荐阅读