![](/img/trans.png)
[英]How to increment Python Pandas DataFrame based on key/values from a dictionary
[英]How to add pandas column values based on key from a dictionary in Python?
我想为每一行添加俱乐部参加的联赛以及联赛所在的国家/地区作为新列。
我最初尝试使用俱乐部/国家/地区的字典,并返回一个值的键:
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'
为这个混乱的问题道歉。 基本上,我希望根据“俱乐部”列值向我的数据集“联盟”和“国家/地区”添加两个新列。 我不确定最简单的方法是什么,但我尝试过不同的方法。 提前致谢。
这是解决它的简单方法之一。 使用 Pandas 在行 https 上应用function://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)
Output:
name club country
0 CR RM Spain
1 Messi BR Spain
2 neymar PSG France
尝试 pandas replace
系列的功能。
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
为了应对club_country_dict中的“列表问题”,将其转换为以下系列:
league_club = pd.Series(club_country_dict.values(), index=club_country_dict.keys(),
name='Club').explode()
结果是:
La Liga Real Madrid
La Liga FC Barcelona
France Ligue 1 Paris Saint-Germain
Name: Club, dtype: object
您还应该在联赛名称与其国家(另一个Series )之间建立“联系”:
league_country = pd.Series({'La Liga': 'Spain', 'France Ligue 1': 'France'}, name='Country')
当然,在这里添加与他们的国家感兴趣的其他联盟。
接下来就是将他们加入到club_details DataFrame中,以Club为索引:
club_details = league_club.to_frame().join(league_country).reset_index()\
.rename(columns={'index':'League'}).set_index('Club')
结果是:
League Country
Club
Paris Saint-Germain France Ligue 1 France
Real Madrid La Liga Spain
FC Barcelona La Liga Spain
然后,假设您的第一个 DataFrame 名为player ,生成最终结果:
result = player.join(club_details, on='Club')
结果是:
Name Club League Country
0 Cristiano Ronaldo Real Madrid La Liga Spain
1 L. Messi FC Barcelona La Liga Spain
2 Neymar Paris Saint-Germain France Ligue 1 France
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.