如何用Pandas map函数结合国家与年龄映射多字典计算零花钱
可以仅用map函数实现,无需循环
当然可以不用循环,直接用map函数结合字段配对来实现。核心思路是把国家和年龄两个字段打包成元组,再通过map对每个元组匹配对应的零花钱字典。
举个具体实现的例子:
首先定义不同国家的年龄-零花钱映射规则:
# 各国年龄对应的零花钱字典 allowance_rules = { "China": {6: 10, 7: 12, 8: 15, 9: 20}, "US": {6: 5, 7: 7, 8: 10, 9: 13}, "UK": {6: 4, 7: 6, 8: 9, 9: 12} }
假设你的DataFramedf包含country(国家)和age(年龄)两列,直接用map处理打包后的字段对:
# 用zip把country和age列打包成元组,再通过map匹配对应零花钱 df['allowance'] = list(map( lambda item: allowance_rules[item[0]][item[1]], zip(df['country'], df['age']) ))
如果要避免因国家不存在或年龄不在规则内导致报错,可以用get方法设置默认值:
df['allowance'] = list(map( lambda item: allowance_rules.get(item[0], {}).get(item[1], 0), zip(df['country'], df['age']) ))
这里如果国家不在规则里,或者对应年龄没有设置零花钱,会返回默认值0。
内容的提问来源于stack exchange,提问作者Niltzable
相关产品推荐
相关产品推荐

