Python 创建新的dataframe列作为其他列的函数

Python 创建新的dataframe列作为其他列的函数,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有Country列的数据框。它为大约15个国家举办了比赛。我想使用映射字典添加一个大陆列,大陆dict,该字典具有从国家名称到大陆名称的映射) 我看到这两个都起作用了 df[“人口”]=df[“能源供应”]/df[“人均能源供应”] df['contraction']=df.apply(lambda x:contractiondict[x['Country']],axis='columns') 但事实并非如此 df[‘大陆]]=大陆dict[df[‘国家]] 看起来问题在于df['Co

我有一个带有
Country
列的数据框。它为大约15个国家举办了比赛。我想使用映射字典添加一个
大陆
列,
大陆dict
,该字典具有从国家名称到大陆名称的映射)

我看到这两个都起作用了

  • df[“人口”]=df[“能源供应”]/df[“人均能源供应”]
  • df['contraction']=df.apply(lambda x:contractiondict[x['Country']],axis='columns')
  • 但事实并非如此

  • df[‘大陆]]=大陆dict[df[‘国家]]
  • 看起来问题在于
    df['Country']
    是一个series对象,因此该语句不够智能,无法将最后一条语句视为与2相同

    问题

  • 我很想理解为什么陈述1有效,而不是陈述3。是因为“分割两个系列对象”被定义为元素分割吗
  • 有没有办法改变3,告诉我需要元素操作,而不必走
    apply
    路线
    • 在案例1中,您正在处理两个熊猫系列,因此它知道如何处理它们

    • 在案例2中,您有一个python字典和pandas系列,pandas不知道如何处理字典(df['country']是pandas系列,但不是字典中的键)


    从您的语句一个映射字典,
    大陆dict
    ,它看起来像
    大陆dict
    是一个Python字典。在这种情况下,

    ContinentDict[some_key]
    
    是一个纯粹的Python调用,而不管对象
    some\u key
    是什么。这就是为什么第三次调用失败的原因,因为
    df['Country']
    不在字典键中(而且永远不可能,因为字典键是不可变的)

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

    Pandas确实为您提供了替换/映射值的工具:

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

    如果你真的想回答问题1,你应该重新措辞你的文章,只关注它。如果你只关心回答问题2,请在副本中找到答案。
    df['Continent'] = df['Country'].map(ContinentDict)