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

2024-09-23 22:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

enter image description here

在这种情况下,我需要在地址3中找到longford,在地址4中找到Co longford和Donegal,在地址4中找到Donegal,所有行都一样


Tags: 数据客户地址情况数组电子商务意义co
1条回答
网友
1楼 · 发布于 2024-09-23 22:22:10

说这是你的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

相关问题 更多 >