使用shift条件切片Pandas DataFrame时保留首行的其他方法
实现方法
除了使用concat拼接首行和筛选结果,还有以下几种更直接的实现方式:
方法一:构造包含首行条件的布尔掩码
直接生成一个布尔序列,首行设为True,其余行使用a > 上一行b的判断逻辑:
import pandas as pd df = pd.DataFrame({'a': [1, 0, 1, 0, 1], 'b':[0, 0, 0, 1 ,0]}) # 构造掩码 mask = pd.Series(True, index=df.index) mask[1:] = df['a'][1:] > df['b'].shift(1)[1:] # 筛选结果 result = df[mask] print(result)
方法二:直接在loc中组合条件
利用逻辑或操作,把“是首行”和“当前行a>上一行b”两个条件合并:
result = df.loc[(df.index == 0) | (df['a'] > df['b'].shift(1))] print(result)
方法三:使用numpy构造布尔数组
借助numpy的数组拼接功能,直接生成掩码:
import numpy as np mask = np.concatenate([[True], df['a'].iloc[1:].values > df['b'].iloc[:-1].values]) result = df[mask] print(result)
以上三种方法都能得到你期望的结果:
a b 0 1 0 2 1 0
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

