如何将带有列表值的字典映射到数据帧?

时间:2016-11-01 20:39:41

标签: python list pandas dictionary dataframe

我需要将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)

2 个答案:

答案 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])