我需要将dict映射到数据框中的列,但是当dict中的值在列表中时,我们不知道该怎么做。理想情况下,我是pos [0]
中值的新列,以及pos [1]
中值的另一列。
dict = {'foo':['A','B'],
'bar':['C','D']}
df = pd.DataFrame([[0,'foo'],
[1,'bar']], columns=['Col1','Col2'])
如果只有一个dict值,以下是我执行此任务的常用方法。
df['Col3'] = df.Col2.map(dict)
答案 0 :(得分:3)
如果我正确理解您的问题,将字典转换为数据框并使用pd.DataFrame.merge
可能最简单:
In [40]: d = {'foo':['A','B'],
...: 'bar':['C','D']}
In [41]: df.merge(pd.DataFrame(d, index=["Col3", "Col4"]).T,
left_on='Col2', right_index=True)
Out[41]:
Col1 Col2 Col3 Col4
0 0 foo A B
1 1 bar C D
答案 1 :(得分:1)
Series.map()也会接受函数,因此你可以传入一个lambda函数来包装查找字典并获取你想要的列表项。
dict = {'foo':['A','B'],
'bar':['C','D']}
df = pd.DataFrame([[0,'foo'],
[1,'bar']], columns=['Col1','Col2'])
df['Col3'] = df.Col2.map(lambda x: dict[x][0])
df['Col4'] = df.Col2.map(lambda x: dict[x][1])