从字典中添加具有映射值的新熊猫列

我正在尝试做一些在熊猫身上应该很简单的事情,但是看起来一点也不简单。我试图添加一个列到现有的熊猫数据框架,这是一个基于另一个(现有)列的映射值。下面是一个小测试案例:

import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001]} )
df["B"] = equiv(df["A"])
print(df)

我希望结果如下:

      A   B
0  7001   1
1  8001   2
2  9001   3

相反,我得到一个错误,告诉我 equv 不是一个可调用的函数。很公平,它是一个字典,但即使我把它包装在一个函数中,我仍然会感到沮丧。因此,我尝试使用一个 map 函数,它似乎可以与其他操作一起工作,但它也被字典所打败:

df["B"] = df["A"].map(lambda x:equiv[x])

在本例中,我只得到 KeyError: 8001。我已经阅读了文档和以前的帖子,但是还没有遇到任何建议如何将字典和熊猫数据框架混合使用的东西。如有任何建议,我们将不胜感激。

101840 次浏览

The right way of doing it will be df["B"] = df["A"].map(equiv).

In [55]:


import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001]} )
df["B"] = df["A"].map(equiv)
print(df)
A  B
0  7001  1
1  8001  2
2  9001  3


[3 rows x 2 columns]

And it will handle the situation when the key does not exist very nicely, considering the following example:

In [56]:


import pandas as pd
equiv = {7001:1, 8001:2, 9001:3}
df = pd.DataFrame( {"A": [7001, 8001, 9001, 10000]} )
df["B"] = df["A"].map(equiv)
print(df)
A   B
0   7001   1
1   8001   2
2   9001   3
3  10000 NaN


[4 rows x 2 columns]