Pandas如何基于值为二元列表的字典映射列并拆分列表为独立列
解决方案
错误原因说明
- 第一次尝试:构造的
new_map映射逻辑完全相反,将字典值列表内的元素作为键、原键作为值,不符合需求;且未将map的计算结果赋值回DataFrame列,同时没有处理值列表拆分的逻辑,最终结果不符合预期。 - 第二次尝试:使用DataFrame的索引值去匹配
new_map的键,而new_map中不存在0、1这类索引键,直接触发KeyError。
正确实现
你要实现的需求可以直接通过map映射后拆分列表的方式完成,只需一行核心代码即可:
import pandas as pd # 你的初始数据 mydf = pd.DataFrame({"x": [1, 2, 3, 4], "cat": ["text1", "text3", "text1", "text4"]}) mydict = { "text1": ["a15", "b3"], "text2": ["a6", "b1"], "text3": ["a3", "b3"], "text4": ["a1", "b12"], } # 核心实现:映射后拆分列表到两个新列 mydf[['left', 'right']] = mydf['cat'].map(mydict).tolist() # 查看结果 print(mydf)
如果需要兼容可能存在的字典缺省值场景,也可以用apply配合pd.Series的写法:
mydf[['left', 'right']] = mydf['cat'].apply(lambda x: pd.Series(mydict.get(x, [pd.NA, pd.NA])))
最终输出结果
| x | cat | left | right |
|---|---|---|---|
| 1 | text1 | a15 | b3 |
| 2 | text3 | a3 | b3 |
| 3 | text1 | a15 | b3 |
| 4 | text4 | a1 | b12 |
内容的提问来源于stack exchange,提问作者a11
相关产品推荐
相关产品推荐

