如何在Pandas中定位满足条件的第二行并创建指定新列
如何仅在满足条件的第二行标记'x'?
给定如下Pandas DataFrame:
import pandas as pd df = pd.DataFrame({'a': [20, 21, 333, 444], 'b': [20, 20, 20, 20]})
定义掩码:
mask = (df.a >= df.b)
需求是仅在满足该掩码条件的第二行添加标记'x',期望输出:
a b c 0 20 20 NaN 1 21 20 x 2 333 20 NaN 3 444 20 NaN
原代码df.loc[mask.cumsum().ne(1) & mask, 'c'] = 'x'会给所有满足条件的首行之后的行都标记'x',不符合需求。
解决方案
可以通过精准定位满足条件的第二行来实现:
方法一:直接定位目标索引
# 初始化c列为空值 df['c'] = pd.NA # 获取所有满足mask的行的索引,取第二个元素(对应第二行) target_idx = mask[mask].index[1] # 给目标行赋值'x' df.loc[target_idx, 'c'] = 'x'
方法二:利用累加计数筛选
df['c'] = pd.NA # 筛选累加计数等于2的行(即满足条件的第二行) df.loc[mask.cumsum() == 2, 'c'] = 'x'
解释
mask.cumsum()会对满足条件的行做累加计数:满足条件的第一行计数为1,第二行为2,后续满足条件的行依次递增。- 直接筛选
mask.cumsum() == 2就能精准定位到目标行,避免了原代码中ne(1)匹配所有后续满足条件行的问题。
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

