首页 > 解决方案 > 如何将多级字典映射到 DataFrame 系列

问题描述

我想根据 DataFrame 中的两列映射多级字典。我到目前为止是这样的:

df = pd.DataFrame({
     'level_1':['A','B','C','D','A','B','C','D'],
     'level_2':[1,2,3,1,2,1,2,3]
})

dict = {
    'A':{1:0.5, 2:0.8, 3:0.4},
    'B':{1:0.4, 2:0.3, 3:0.7},
    'C':{1:0.3, 2:0.6, 3:0.6},
    'D':{1:0.5, 2:0.4, 3:0.4}
}

df['mapped'] = np.where(
    df.level_1 == 'A',
    df.level_2.map(dict['A']),
    np.where(
        df.level_1 == 'B',
        df.level_2.map(dict['B']),
        np.where(
            df.level_1 == 'C',
            df.level_2.map(dict['C']),
            np.where(
                df.level_1 == 'D',
                df.level_2.map(dict['D']),
                np.nan
            )
        )
    )
)

一定有更好的方法,但我似乎找不到。这变得非常乏味,因为我的真正字典在 level_2 上有更多选项。

谢谢!

标签: pythonpandasdictionary

解决方案


我们能试试MultiIndex.map

df['mapped'] = df.set_index(['level_1', 'level_2']).index.map(pd.DataFrame(d).unstack())

  level_1  level_2  mapped
0       A        1     0.5
1       B        2     0.3
2       C        3     0.6
3       D        1     0.5
4       A        2     0.8
5       B        1     0.4
6       C        2     0.6
7       D        3     0.4

注意:dict是python内置的,所以dict必须避免使用作为变量名。这里我用过d代表你的映射字典


推荐阅读