基于字典中的值列表在pandas中创建新列

2024-09-29 19:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个包含位置的数据框

df1 = pd.DataFrame({'col1': [1,2,3,4,5], 'location': ['Hackney', 'Mile End', 'Croydon', 'Edgbaston', 'Wembley'] })

然后我把这些地方的清单和它们所在的主要城市都储存在字典里

dict ={
['Hackney', 'Mile End', 'Croydon', 'Wembley'] : 'London',
['Edgbaston'] : 'Birmingham'
}

问题:如何创建一个新列(例如df1['city']),该列使用此词典填充每个location列条目所在的城市注意:如果创建字典来实现这一点不是理想的方法,请随意建议其他方法

理想输出:希望获得如下所示的内容(如果需要扩展词典,则这应适用于更多条目)

df1 = pd.DataFrame({'col1': [1,2,3,4,5], 'location': ['Hackney', 'Mile End', 'Croydon', 'Edgbaston', 'Wembley'], 'city': ['London','London','London','Birmingham','London'] })

尝试了:使用apply方法,但似乎出现了错误

df1['city'] = df1['location'].apply(dict)

Tags: 方法citydataframe字典locationcol1endpd
2条回答

您不能使用具有可变键的python dict,这意味着您可能需要一个元组而不是列表

dict ={
('Hackney', 'Mile End', 'Croydon') : 'London',
('Edgbaston', ) : 'Birmingham'
}

一旦你有了这个功能,你就可以使用map函数将一个位置映射到一个城市。如果您的dict没有键的元组,您可以直接使用它,但在本例中-您可以定义一个函数-

def get_city(location):
    for key in dict.keys():
        if location in key:
            return dict[key]

df1['location'].map(get_city)
#0        London
#1        London
#2        London
#3    Birmingham
#4          None

您的字典无效,您可以使用list作为dictionary的值,也不能像dict那样调用DictionAnry,因为python代码名,内置:

d = { 'London': ['Hackney', 'Mile End', 'Croydon'],
     'Birmingham': ['Edgbaston']}

以下是可能的展平列表中的值,然后使用^{},如果不存在,则返回缺少的值:

d1 = {x: k for k, v in d.items() for x in v}
print (d1)
{'Hackney': 'London', 'Mile End': 'London', 'Croydon': 'London', 'Edgbaston': 'Birmingham'}

df1['city'] = df1['location'].map(d1)
print (df1)
   col1   location        city
0     1    Hackney      London
1     2   Mile End      London
2     3    Croydon      London
3     4  Edgbaston  Birmingham
4     5    Wembley         NaN

如果字典格式为键中的元组:

d ={('Hackney', 'Mile End', 'Croydon') : 'London', ('Edgbaston', ) : 'Birmingham'}


d1 = {x: v for k, v in d.items() for x in k}
print (d1)
{'Hackney': 'London', 'Mile End': 'London', 'Croydon': 'London', 'Edgbaston': 'Birmingham'}

df1['city'] = df1['location'].map(d1)
print (df1)
   col1   location        city
0     1    Hackney      London
1     2   Mile End      London
2     3    Croydon      London
3     4  Edgbaston  Birmingham
4     5    Wembley         NaN

相关问题 更多 >

    热门问题