Pandas - 从字典中添加新列到数据框

155

我想在这个数据框中添加一列“D”:

U,L
111,en
112,en
112,es
113,es
113,ja
113,zh
114,es

基于以下词典:

d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}

因此得到的数据框应如下所示:

U,L,D
111,en,en
112,en,en
112,es,en
113,es,es
113,ja,es
113,zh,es
114,es,es
到目前为止,我尝试过pd.join()方法,但我无法弄清它如何与字典一起使用。

7
这是另一个错误标记为重复的问题的例子。提醒所有用户:仅因为两个问题具有相同的答案并不意味着它们是重复的。应该重新打开此问题。StackOverflow 应该是一个从问题到解决方案的键值存储。如果一个问题可以使用来自不相关问题的答案来解决,请将其作为新答案提供,适应用户面临的特定问题,而不是将问题标记为重复。 - MRule
3个回答

281

调用 map 并传递字典,这将执行查找并返回该键的关联值:

In [248]:

d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}
df['D'] = df['U'].map(d)
df
Out[248]:
     U   L   D
0  111  en  en
1  112  en  en
2  112  es  en
3  113  es  es
4  113  ja  es
5  113  zh  es
6  114  es  es

我需要做的正是这个。谢谢,亲切的先生! - Anjaan

60

这里有一种更简单的方法,也应该能很好地工作:

df["D"] = pd.Series(d)

注意:这个字典的键需要在DataFrame索引中。


8

当我尝试使用index.map()时,使用EdChum的解决方案出现了“TypeError:'dict' object is not callable”的错误...而且我还没有找到将索引作为Series获取的方法。

因此,我找到了另一种解决这个问题的方法,首先从字典对象创建一个Series对象。

new_d = pd.Series(d)

然后使用您喜欢的列进行pd.join。这可能会有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接