【发布时间】:2020-03-27 20:08:09
【问题描述】:
我有一个 DataFrame 和一个字典。我想根据 Dictionary 为 DataFrame 中的新列赋值。
ContinentDictionary = {'United States':'North America',
'Japan':'Asia',
'United Kingdom':'Europe',
'Australia':'Australia',
'Argentina':'South America'}
c1 = pd.Series({'Size':'Large','Pi':6,'Pr':160})
c2 = pd.Series({'Size':'Small','Pi':9,'Pr':235})
c3 = pd.Series({'Size':'Large','Pi':12,'Pr':300})
Countries = pd.DataFrame([c1,c2,c3],index=['United States','Japan','United Kingdom'])
Countries.index.name='Country'
这完成了工作,为国家数据框中的每个国家/地区分配了一个大陆:
Countries['Continent'] = Countries.index.map(lambda x: ContinentDictionary[x])
这也有效,但我需要事先将索引“国家”设置为一列以使 .apply 工作:
Countries['Continent'] = Countries.reset_index(inplace = True)
Countries['Continent'] = Countries.apply(lambda x: ContinentDictionary[x['Country']], axis=1)
我想更好地理解为什么这两种方法不起作用,并希望得到解释:
Countries['Continent'] = Countries.apply(lambda x: ContinentDictionary[x.index], axis=1)Countries['Continent'] = ContinentDictionary[Countries.index]
两者都给出:
TypeError: ("unhashable type: 'Index'"
在这两者中,我可以想象为什么 #2 可能不起作用,但仍然希望更好地理解。
【问题讨论】:
-
变量名称应遵循
lower_case_with_underscores样式。另外,请问您为什么将国家名称设置为索引,而不是简单地将其作为列? -
谢谢,我会注意正确的约定!作为索引的国家名称是我被赋予使用的数据集。我确实将其更改为一列,并且能够使 .apply() 像上面一样工作。但我仍然不明白为什么我可以通过索引(上面的#1)。
-
apply()方法可以简化为countries_df['country_name'].map(continent_dict)。
标签: python pandas dataframe data-science