如果不满足另一列中的条件,尝试从pandas列中返回值

时间:2019-11-15 17:19:38

标签: python pandas dataframe if-statement apply

我正在处理的代码如下。我有一个邮政编码前缀列表,我将其与一列邮政编码进行比较,如果它们不匹配,则将其解析为前三位以获得真/假列。我有第三列,其中包含状态缩写,“ WY”,“ NY”,“ KY”等,并且如果zip检查列为True,我想将“ State”中的内容替换为“ WY”,否则,如果为假,则保留该行中已经存在的内容。我尝试了几种不同的方法,但是什么也不想运行。有什么建议吗?

zips = ['820', '821', '822', '823', '824', '825', '826', '827', '828', '829', '830', '831']

df['Zip']= df['Zip'].astype(str)

df['ZipCheck']= df['Zip'].str[:3]

df['ZipCheck']= df['ZipCheck'].apply(lambda x: True if x in zips else False)

代码在这里可以正常工作,我在Zip Check中得到了正确的True False列,但是我不能将其正确地应用于下面的现有“状态”列:

df = df.assign(df['State']=np.where(df['ZipCheck'] == True, 'WY', df['State']))

1 个答案:

答案 0 :(得分:0)

如果您不需要“ ZipCheck”列,而只需定义状态,则可以执行以下操作:

df.loc[df.Zip.str[:3].isin(zips), 'State'] = 'WY'