Python:如果 Address1、Address2、Address3、Address4 列字符串包含 'x',则在 Address4 列中写入 'x'

Python: If column Address1, Address2,Address3,Address4 string contains 'x' then write 'x' in column Address4

我是 python 的新手,我不确定从哪里开始整理我的数据集, 我有客户电子商务销售数据,需要其中一列包含地址的县部分。县在大多数情况下已经在 Address4 列中,但一些客户在 Address1、Address2 或 Address3 中填写了他们的县。

我有一个包含所有 32 个县的数组,所以我想我需要检查每一列 Address1、Address2、Address3、Address4 以查看它们是否包含数组中的一个县,如果找到,请将找到的县写入地址4。 希望这是有道理的。

在这种情况下,我需要从 Address3 找到 longford 并写入 Co Longford,在 Address4 中找到 Donegal 并在 Address 4 中写入 Donegal,所有行都相同,

说这是你的df

df=pd.DataFrame({'Address1':[np.nan, 'jkl','pol','city1', np.nan],'Address2':['lop',np.nan,'pola',np.nan, np.nan],'Address3':[np.nan, np.nan,np.nan,'city13', np.nan],'Address4':[np.nan, np.nan,np.nan,np.nan,'shaka']})

    Address1 Address2 Address3 Address4
0      NaN      lop      NaN      NaN
1      jkl      NaN      NaN      NaN
2      pol     pola      NaN      NaN
3    city1      NaN   city13      NaN
4      NaN      NaN      NaN    shaka

并说这是您的地址列表

listofAdress=['lop','jkl','pola','city13']

创建一个临时列,每行包含城市列表,不包括列 addresses4

df['temp']=df.iloc[:,:3].values.tolist()

将地图 templistofAdress 转换为集合并相交,然后删除温度

  df=df.assign(Address4=np.where(df.Address4.isna(),(df['temp'].map(set).apply(lambda x:x.intersection(set(listofAdress)))).map(list).str[0],df.Address4)).drop('temp',1)




      Address1 Address2 Address3 Address4
0      NaN      lop      NaN      lop
1      jkl      NaN      NaN      jkl
2      pol     pola      NaN     pola
3    city1      NaN   city13   city13
4      NaN      NaN      NaN    shaka