1

让我们假设 df 看起来像:

import pandas as pd
df = pd.DataFrame(data={'fname':['Anky','Anky','Tom','Harry','Harry','Harry'],'lname':['sur1','sur1','sur2','sur3','sur3','sur3'],'role':['','abc','def','ghi','','ijk'],'mobile':['08511663451212','+4471123456','0851166346','','0851166347',''],'Pmobile':['085116634512','1234567890','8885116634','','+353051166347','0987654321']})

import numpy as np
df.replace('',np.nan,inplace=True)

东风:

    fname   lname   role    mobile          Pmobile         
0   Anky    sur1    NaN    08511663451212   085116634512    
1   Anky    sur1    abc    +4471123456      1234567890      
2   Tom     sur2    def    0851166346       8885116634      
3   Harry   sur3    ghi    NaN              NaN             
4   Harry   sur3    NaN    0851166347       +353051166347   
5   Harry   sur3    ijk    NaN              0987654321      

所以我想mobilePmobile值开始的值更新列,'08','8','+353同时它应该从Pmobile找到匹配项的字段中删除值并将数据复制到mobile字段。

目前我得到这个:

df.mobile.update(df['Pmobile'][df['Pmobile'].str.startswith(('08','8','+353'),na=False)])
df.Pmobile[df.mobile==df.Pmobile] = np.nan

东风:

    fname   lname   role    mobile          Pmobile 
0   Anky    sur1    NaN     085116634512    NaN 
1   Anky    sur1    abc     +4471123456     1234567890  
2   Tom     sur2    def     8885116634      NaN 
3   Harry   sur3    ghi     NaN             NaN 
4   Harry   sur3    NaN     +353051166347   NaN 
5   Harry   sur3    ijk     NaN             0987654321  

有没有办法即时执行此操作?

提前致谢。:)

4

1 回答 1

2

您可以使用shift左移列执行此操作:

In[50]:

df.loc[df['Pmobile'].str.startswith(('08','8','+353'),na=False), ['mobile','Pmobile']] = df[['mobile','Pmobile']].shift(-1,axis=1)
df
Out[50]: 
   fname lname role         mobile     Pmobile
0   Anky  sur1  NaN   085116634512         NaN
1   Anky  sur1  abc    +4471123456  1234567890
2    Tom  sur2  def     8885116634         NaN
3  Harry  sur3  ghi            NaN         NaN
4  Harry  sur3  NaN  +353051166347         NaN
5  Harry  sur3  ijk            NaN  0987654321

因此,使用您的条件来屏蔽感兴趣的行,然后在满足条件的情况下分配左移 1 的那 2 列的结果。

这将留下一个NaN值发生变化的地方,并且在不满足条件的地方什么也不做

于 2018-12-18T09:43:27.317 回答