如何在Python中基于字典中的键添加列值?

2024-06-02 07:20:08 发布

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

我的数据框如下所示: Name

我想为每一行添加俱乐部所在的联赛和联赛所在的国家,作为新的列

我最初尝试使用俱乐部/国家的字典,并返回一个值的键:

club_country_dict = {'La Liga':['Real Madrid','FC Barcelona'],'France Ligue 1':['Paris Saint-Germain']}

key_list=list(club_country_dict.keys())
val_list=list(club_country_dict.values())

但这遇到了问题,因为我的每个键值实际上都是一个列表,而不是一个值

然后我尝试了一些IF-then逻辑,为每个联赛设置独立变量,并检查每个变量中是否包含俱乐部值:

la_Liga = ['Real Madrid','FC Barcelona']

for row in data:
      if data['Club'] in la_Liga:
            data['League'] = 'La Liga'

为这个麻烦的问题道歉。基本上,我希望在我的数据集中添加两个新列,即“联赛”和“国家”,基于“俱乐部”列的值。我不确定最简单的方法是什么,但我尝试过不同的方法。提前谢谢


Tags: 数据data国家realcountrydictlalist
3条回答

您可以将字典转换为数据帧,然后合并:

df = pd.DataFrame({"Name": ["CR", "Messi", "neymar"], "Club": ["Real Madrid", "FC Barcelona", "Paris Saint-Germain"]})

df.merge(pd.DataFrame(club_country_dict.items(), columns=['League', 'Club']).explode('Club'),
         on = 'Club', how='left')

enter image description here

尝试系列的pandasreplace功能

df = pd.DataFrame({"Name" : ['Cristiano', 'L. Messi', "Neymar"], 'Club' : ["Real Madrid", "FC Barcelona", "Paris Saint-Germain"]})

df:

    Name        Club
0   Cristiano   Real Madrid
1   L. Messi    FC Barcelona
2   Neymar      Paris Saint-Germain

现在添加新列:

club_country_dict = {'Real Madrid': 'La Liga',
                     'FC Barcelona' : "La Liga",
                     'Paris Saint-Germain': 'France Ligue 1'}
df['League'] = df.Club.replace(club_country_dict)

df:

    Name        Club                   League
0   Cristiano   Real Madrid            La Liga
1   L. Messi    FC Barcelona           La Liga
2   Neymar      Paris Saint-Germain    France Ligue 1

下面是一个简单的解决方法。对行使用“应用”函数 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

import pandas as pd

df = pd.DataFrame({"name": ["CR", "Messi", "neymar"], "club": ["RM", "BR", "PSG"]})

country = {"BR": "Spain", "PSG": "France", "RM": "Spain"}

df["country"] = df.apply(lambda row: country[row.club], axis=1)

print(df)

输出:

     name club country
0      CR   RM   Spain
1   Messi   BR   Spain
2  neymar  PSG  France

相关问题 更多 >