Pandas如何实现DataFrame数值列与同行动态字典映射生成新列
问题原因分析
- 第一种写法错误:
df.data.map(df.Dict)中的map方法会将传入的df.Dict(Series类型)作为全局映射表,用data列的值匹配df.Dict的索引,而非匹配每行对应的字典,因此结果不符合预期。 - 第二种写法错误:
df.data.apply(lambda rows: rows.map(rows.Dict))是对data单列执行apply,lambda接收的rows实际是data列的单个整数数值,本身没有map方法和Dict属性,因此触发属性报错。
正确实现方案
方案1:按行遍历实现(逻辑直观,适合小数据量)
通过设置axis=1对DataFrame整行执行遍历,直接取当前行的data作为key,匹配同行字典的对应值后取出列表内的字符串:
df['result'] = df.apply(lambda row: row['Dict'][row['data']][0], axis=1)
方案2:列表推导式实现(性能更优,适合大数据量)
用zip同时遍历Dict和data两列,直接推导生成结果列,运行效率远高于行遍历:
df['result'] = [dict_val[data_key][0] for dict_val, data_key in zip(df['Dict'], df['data'])]
两种方案运行后均可得到你预期的result列结果。
内容的提问来源于stack exchange,提问作者angie866
相关产品推荐
相关产品推荐

