gpt4 book ai didi

python - 如何将具有多个条件的函数应用于pandas dataframe?

转载 作者:行者123 更新时间:2023-12-01 09:31:31 24 4
gpt4 key购买 nike

所以我知道你不能根据此 post 在 pandas 数据帧上使用 if 语句否则您将收到此错误:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 那么如何应用具有多个条件的函数呢?

我有一个导出 CRM 数据的数据框,其中包含一个国家/地区列,我需要将其转换为 2 个字母的国家/地区代码(美国到美国等)。

以下是国家/地区列中包含的唯一值的列表:

['United States', 'Canada', 'Australia', 'United Kingdom', 'US',
'Germany', 'New Zealand', 'Netherlands', 'Mexico', 'France',
'Ireland', 'Dominican Republic', 'Puerto Rico', 'Taiwan', 'USA',
'1', 'united States', 'United Staes', 'United State', 'usa',
'United Sates', 'United Stated', 'usaa', 'Unite States', 'nv',
'canada', 'Pakistan']

我的解决方案是尝试这样的事情:

def country_codes(country):
if country.str.contains(r'(United Kingdom)'):
return 'GB'
elif country.str.contains(r'(Canada|canada)'):
return 'CA'
elif country.str.contains(r'(Australia)'):
return 'AU'
elif country.str.contains(r'(United|US|USA|State|usa)'):
return 'US'
elif country.str.contains(r'(Germany)'):
return 'DE'
elif country.str.contains(r'(New Zealand)'):
return 'NZ'
elif country.str.contains(r'(Netherlands)'):
return 'NL'
elif country.str.contains(r'(Mexico)'):
return 'MX'
elif country.str.contains(r'(France)'):
return 'FR'
elif country.str.contains(r'(Ireland)'):
return 'IE'
elif country.str.contains(r'(Dominican)'):
return 'DO'
elif country.str.contains(r'(Puerto)'):
return 'PR'
elif country.str.contains(r'(Taiwan)'):
return 'TW'
else:
return country

但是在尝试df.apply(country_codes)后,我得到了相同的ValueError。如果有一种更简单的方法可以在不使用正则表达式匹配的情况下完成此操作,我也愿意这样做。

最佳答案

一种有效的方法是创建一个字典,然后在更新数据帧时迭代该字典:

d = {'United Kingdom': 'GB', 'Canada|canada': 'CA',
'Australia': 'AU', 'Untied|US|State|USA': 'US'}

df = pd.DataFrame({'Country': ['US', 'USA', 'United Kingdom', 'canada', 'Australia']})

for k, v in d.items():
df.loc[df['Country'].str.contains(k), 'Code'] = v

print(df)

# Country Code
# 0 US US
# 1 USA US
# 2 United Kingdom GB
# 3 canada CA
# 4 Australia AU

关于python - 如何将具有多个条件的函数应用于pandas dataframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49929092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com