python - 如何将多级字典映射到 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 上有更多选项。
谢谢!
解决方案
我们能试试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
代表你的映射字典
推荐阅读
- matlab - 在 for 循环中使用 struct 访问二叉搜索树
- android - 我可以在扩展小部件中使用列小部件吗?
- amazon-web-services - AWS EC2 用户数据在修改后不起作用
- html - 如何修复 div 中的左边距以在很多段落的中间工作
- python - Tkinter 动画标签文本作为 html 品牌
- django-views - Django-不在前端显示 PDF 页面
- javascript - 如何开发具有多个下拉菜单的站点内链接程序?
- java - Java 正则表达式,“”和“\\s\\s”之间的区别
- javascript - How to 'npm run build' on the server regularly
- ios - 我如何能够在下面的代码中实现洗牌功能?