我有这个 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'
