创建列并从字典中为其赋值

2024-10-02 14:19:37 发布

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

我有一本这样的字典

{"regions":[
   {"name": "South America", "code": "SA01,SA02,SA03"},
   {"name": "Asia Pacific", "code": "AP01,AP02,AP03"}
]}

我有一个df看起来像这样

id    code
1     SA01
2     SA02
3     SA03
4     AP01
5     AP02
6     AP03

我想在df中创建一列region,它的值将基于regions中的code值,因此结果如下所示

id    code    region
1     SA01    South America
2     SA02    South America
3     SA03    South America
4     AP01    Asia Pacific
5     AP02    Asia Pacific
6     AP03    Asia Pacific

我想知道做这件事最好的方法是什么。你知道吗


Tags: nameiddfcoderegionssouthasiaamerica
2条回答

本例不做任何修改就获取当前数据集。我相信这可以由更有经验的人来完善。你知道吗

import pandas as pd

mydict = {"regions":[
{"name": "South America", "code": "SA01,SA02,SA03"},
{"name": "Asia Pacific", "code": "AP01,AP02,AP03"}
]}

col_names_regions = ['code', 'region name']
df_regions = pd.DataFrame(columns=col_names_regions)

for key, values in mydict.items():
  for value in values:
    codes = value.get('code')
    name = value.get('name')
    for code in codes.split(','):
      df1 = {'code': code, 'region name': name}
      df_regions = df_regions.append(df1, ignore_index=True)

print (df_regions)
# output 
   code    region name
0  SA01  South America
1  SA02  South America
2  SA03  South America
3  AP01   Asia Pacific
4  AP02   Asia Pacific
5  AP03   Asia Pacific

您可以重新定义字典(d此处),为字符串中出现的每个代码提供一个单独的code:region条目,并使用它映射code列中的值:

d_ = {code:sd['name'] for sd in d['regions'] for code in sd['code'].split(',')} 
# {'SA01': 'South America', 'SA02': 'South America', 'SA03': 'South America',...
df['region'] = df.code.map(d_)

print(df)

   id  code         region
0   1  SA01  South America
1   2  SA02  South America
2   3  SA03  South America
3   4  AP01   Asia Pacific
4   5  AP02   Asia Pacific
5   6  AP03   Asia Pacific

相关问题 更多 >