我试图在数据集中创建一个新列,该列依赖于数据中的两个单独列(国家和邮政编码)。如果国家是“美国”,我希望新列将邮政编码列中的数据作为数据并删除“-”之后的所有内容(仅保留前五个数字)。如果国家是“加拿大”,则我希望新列采用邮政编码列中的数据,请删除所有空格并将数据输入到新列中。请参见下面的示例。
我尝试了几种不同的方法,包括以下方法,但均无济于事
(1)df ['new column'] = [df ['邮政编码] .str [:5]如果x =='USA',否则在df ['Country']中x为'no'
(2)美国= df ['国家/地区] .str.contains('美国')
canada = df['Country'].str.contains('Canada')
df['PYZipCleaned'] = np.where(USA, 'USA', zipclean.str.replace('-',""))
请帮忙
最佳答案
您的第一次尝试非常接近-假设只有两个国家/地区,则可以使用if来相应地处理邮政编码。 Pythons zip()
函数甚至允许您将所有内容都放入一个列表理解中,尽管这不一定能使可读性最高的代码
df['new column'] = [el[0][:5] if el[1] == 'USA' else el[0].replace(' ', '') for el in zip(df['Zip Code'], df['Country'])]
发生的事情并不太复杂:您可以检查国家/地区代码是否为USA,如果是,请输入前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)
第一行将邮政编码复制到新列,并一口气处理Canada格式。由于美国行不包含空格,因此只会影响加拿大行。然后,您只需找到USA行并将其切成您的意愿即可。
编辑:
由于有一些带有破折号而不是空格的加拿大示例,因此以下代码块是解决方法
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 - Python-取决于独立列的值的两个独立条件(美国/加拿大邮政编码练习),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58983346/