将元组列表映射到新列

3 投票
2 回答
2503 浏览
提问于 2025-04-18 17:19

假设我有一个 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)]

我想把这个元组列表中的数据映射到这个数据框中,让每个元组的第二个元素放到一个新列里,这个新列的行要和每个元组的第一个元素对应。

最终的结果应该是这样的:

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 等方法,但始终没有找到解决办法。所以对于那些指出我没有真正提问的人,我该如何把这个元组列表映射到数据框中,让每个元组的第二个元素放到一个新列里,并且这个新列的行要和每个元组的第一个元素对应呢?

2 个回答

-1

这个例子有帮助吗?

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

你需要把一组元组转换成字典,这在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函数可以接收字典、序列或函数作为参数。

applymap函数则是接收一个函数作为参数,但它是对整个数据框的每个元素进行操作,这在这种情况下并不是你想要的。

在线文档中展示了如何逐个元素地应用操作,优秀的书籍也有相关内容。

撰写回答