Skip to main content
 首页 » 编程设计

python之Pandas :比较行值并修改下一列的行值

2025年05月04日21www_RR

我有这个 Pandas 数据框:

    A                             B 
0   xyz                          Lena 
1   NaN                          J.Brooke 
2   NaN                          B.Izzie 
3   NaN                          B.Rhodes 
4   NaN                          J.Keith         
.....   

我想比较 B 列的值,如果行值以 B 开头,那么在它的 A 列的相邻行中应该写入新的,类似地,如果 J 那么旧的。以下是我的预期:

    A                             B 
0   xyz                         Lena 
1   old                         J.Brooke 
2   new                         B.Izzie 
3   new                         B.Rhodes 
4   old                         J.Keith         
.....   

我无法理解如何做到这一点。首先,我可以使用 startswith() 但是如何比较一行值,然后在另一列的相邻行中获得所需的字段值? 这是一个小案例,我正在尝试很多 og 更复杂的事情......Pandas 确实很强大!

请您参考如下方法:

使用numpy.select与 Series.str.startswith如果需要根据条件设置新值:

m1 = df['B'].str.startswith('B') 
m2 = df['B'].str.startswith('J') 

如果还需要通过 Series.isna 测试缺失值链条件:

m1 = df['B'].str.startswith('B') & df['A'].isna() 
m2 = df['B'].str.startswith('J') & df['A'].isna() 

df['A'] = np.select([m1, m2], ['new','old'], df['A']) 
print (df) 
     A         B 
0  xyz      Lena 
1  old  J.Brooke 
2  new   B.Izzie 
3  new  B.Rhodes 
4  old   J.Keith 

或者使用DataFrame.loc :

df.loc[m1, 'A'] = 'new' 
df.loc[m2, 'A'] = 'old'