Python 将元组列表映射到新列

Python 将元组列表映射到新列,python,pandas,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',

假设我有一个
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)]
我想映射
tp
do
df
,这样每个元组中的第二个元素将位于一个新列中,该列对应于与每个元组中第一个元素匹配的行

最终结果如下所示:

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

我试过使用
lambdas
pandas.applymap
pandas.map
,等等,但似乎无法破解这个。因此,对于那些会指出我实际上没有提出问题的人,如何映射
tp
do
df
,使每个元组中的第二个元素落在一个新列中,该列对应于与每个元组中第一个元素匹配的行?

您需要将元组列表转换为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
用于的文档显示它将dict、序列或函数作为函数arg

将函数作为参数,但在整个数据帧上按元素操作,这不是本例中要执行的操作


演示了如何应用操作元素,以及优秀的

示例是否有帮助

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'])

我怀疑您使用
map
时遇到的问题是它需要一个函数或dict。在许多地方,可以使用2元组列表来代替dict,但这不是其中之一<代码>映射将尝试将该列表视为一个函数。