将元组列表映射到新列

时间:2014-08-14 19:12:55

标签: python pandas

假设我有pandas.DataFrame

In [76]: df
Out[76]: 
          a         b  c
0 -0.685397  0.845976  w
1  0.065439  2.642052  x
2 -0.220823 -2.040816  y
3 -1.331632 -0.162705  z

假设我有一个元组列表:

In [78]: tp
Out[78]: [('z', 0.25), ('y', 0.33), ('x', 0.5), ('w', 0.75)]

我想映射tpdf,以便每个元组中的第二个元素落在一个新列中,该列对应于与每个元组中第一个元素匹配的行。

最终结果如下:

In [87]: df2
Out[87]: 
          a         b  c   new
0 -0.685397  0.845976  w  0.75
1  0.065439  2.642052  x  0.50
2 -0.220823 -2.040816  y  0.33
3 -1.331632 -0.162705  z  0.25

我尝试过使用lambdaspandas.applymappandas.map等,但似乎无法解决这个问题。因此,对于那些指出我实际上没有问过问题的人,我将如何映射tpdf,使每个元组中的第二个元素落在与行匹配对应的新列中每个元组中的第一个元素?

2 个答案:

答案 0 :(得分:4)

你需要把你的元组列表变成一个dict,这在python中很容易做到,然后在它上面调用map

In [4]:

df['new'] = df['c'].map(dict(tp))
df
Out[4]:
              a         b  c   new
index                             
0     -0.685397  0.845976  w  0.75
1      0.065439  2.642052  x  0.50
2     -0.220823 -2.040816  y  0.33
3     -1.331632 -0.162705  z  0.25

map的文档表明它需要作为一个函数arg dict,series或function。

applymap将一个函数作为一个arg,但在整个数据框架上运行元素,这不是你想要做的事情。

online docs显示如何明智地应用操作元素,优秀的book

答案 1 :(得分:0)

这个例子有帮助吗?

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

>>> d = {'col1': ts1, 'col2': ts2}
>>> df = DataFrame(data=d, index=index)
>>> df2 = DataFrame(np.random.randn(10, 5))
>>> df3 = DataFrame(np.random.randn(10, 5),
... columns=['a', 'b', 'c', 'd', 'e'])