如何提取Pandas DataFrame中指定列值发生变化时的对应行
实现代码
核心逻辑是对比ts列当前行与上一行的取值,标记出发生变化的位置,再同时取出变化位置的前后行即可,完整可运行代码如下:
import pandas as pd # 构造示例DataFrame data = { 'ts': ['n', 'n', 'l', 'l', 'l', 'l', 'n'], 'fdw': [[0,0]]*7, 'time_stamp': [1635211605896, 1635211606896, 1635211607896, 1635211608896, 1635211609896, 1635211609896, 1635211609896] } df = pd.DataFrame(data) # 标记ts列与上一行不同的行 change_mask = df['ts'] != df['ts'].shift(1) # 提取变化行的索引,以及变化行的前一行索引 target_index = change_mask[change_mask].index target_index = target_index.union(target_index - 1) # 得到最终结果 result = df.loc[target_index] print(result)
运行后输出和你预期的完全一致:
ts fdw time_stamp 1 n [0, 0] 1635211606896 2 l [0, 0] 1635211607896 5 l [0, 0] 1635211609896 6 n [0, 0] 1635211609896
注意事项
如果你的原始DataFrame没有按时间顺序排序,需要先按time_stamp字段排序后再执行上述逻辑,避免出现顺序错误导致的判断失误:
df = df.sort_values('time_stamp').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者AfterFray
相关产品推荐
相关产品推荐

