gpt4 book ai didi

Python - 两个单独的条件取决于独立列的值(美国/加拿大邮政编码练习)

转载 作者:行者123 更新时间:2023-12-01 00:20:51 29 4
gpt4 key购买 nike

我正在尝试在数据集中创建一个新列,该新列依赖于数据中的两个单独的列(国家/地区和邮政编码)。如果国家/地区是“美国”,我希望新列获取邮政编码列中的数据并删除“-”后面的所有内容(仅保留前五个数字)。如果国家/地区是“加拿大”,我希望新列获取邮政编码列中的数据,删除所有空格并将数据输入到新列中。请参阅下面的示例。

enter image description here

我尝试了几种不同的方法,包括以下方法,但没有一个有效

(1) df['新列'] = [df['邮政编码'].str[:5] if x == '美国' else 'no' for x in df['国家']]

(2) usa = df['国家'].str.contains('美国')

canada = df['Country'].str.contains('Canada')

df['PYZipCleaned'] = np.where(USA, 'USA', zipclean.str.replace('-',""))

请帮忙

最佳答案

您的第一次尝试实际上非常接近 - 假设只有两个国家/地区,您可以使用 if else 来相应地处理邮政编码。 Python 的 zip() 函数甚至允许您将所有内容放入一个列表理解中,尽管这不一定会产生最具可读性的代码

df['new column'] = [el[0][:5] if el[1] == 'USA' else el[0].replace(' ', '') for el in zip(df['Zip Code'], df['Country'])]

发生的事情并不太复杂:检查国家/地区代码是否为美国,如果是,则只需取前 5 个字符,否则通过调用 string.replace 删除空格

要获得与您提议的非常接近的方式,请使用:

df['new column'] = df['Zip Code'].str.replace(' ', '')
usa = df['Country'].str.contains('USA')
df['new column'][usa] = df['new column'][usa].str.slice(0,5)

第一行将邮政编码复制到新列,并一次性处理加拿大格式。由于美国行不包含空格,这只会影响加拿大行。然后,您只需找到美国行并将它们按照您的意愿切片即可。

编辑:由于有一些加拿大示例使用破折号而不是空格,因此可以使用以下代码块

df['new column'] = df['Zip Code'].str.replace(' ', '').str.replace('-', '')
usa = df['Country'].str.contains('USA')
df['new column'][usa] = df['new column'][usa].str.slice(0,5)

关于Python - 两个单独的条件取决于独立列的值(美国/加拿大邮政编码练习),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58983346/

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