根据其他列创建新的数据框列

3

我有一个包含“Country”列的数据帧。它有大约15个国家的行。 我想使用一个映射字典“ContinentDict”(该字典从国家名称到大陆名称的映射)添加一个“Continent”列。

我看到以下两种方法可以实现:

  1. df['Population'] = df['Energy Supply'] / df['Energy Supply per Capita']
  2. df['Continent'] = df.apply(lambda x: ContinentDict[x['Country']], axis='columns')

但是以下代码无法实现:

  1. df['Continent'] = ContinentDict[df['Country']]

看起来问题在于“df ['Country']”是一个Series对象,因此该语句无法像第2个语句一样智能地处理最后的语句。

问题:

  1. 我想了解为什么第1个语句可行而第3个不可行?是因为“两个Series对象相除”被定义为元素级除法吗?
  2. 是否有办法更改第3个语句以告诉程序我想进行元素级操作,而不必使用“apply”路线?

如果你真的想要回答问题1,你应该重新表述你的帖子,只关注它。如果你只关心回答问题2,在重复的帖子中找到答案即可。 - Dani Mesejo
2个回答

1
df['Continent']=df['Country'].map(ContinentDict)
  • 情况1中,你正在处理两个Pandas系列,因此它知道如何处理它们。

  • 情况2中,你有一个Python字典和Pandas系列,Pandas不知道如何处理字典(df['country']是Pandas系列但不是字典中的键)


1

根据您的陈述,映射字典ContinentDict,看起来ContinentDict是一个Python字典。在这种情况下,

ContinentDict[some_key]

这是一个纯Python调用,不管some_key是什么对象。这就是为什么第三个调用失败的原因,因为df ['Country']不在字典键中(并且它永远不会在那里,因为字典键不可变)。

在这种情况下,Python只允许索引确切的键,并在键不在字典中时引发错误。

Pandas确实提供了一个工具,可以替换/映射值:

df['Continent'] = df['Country'].map(ContinentDict)

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