如何基于相邻行timestamp差值与type状态修改Pandas的value列值
实现方法
你可以直接通过构造布尔条件掩码批量修改符合要求的value值,逻辑清晰且效率更高:
import pandas as pd # 构造示例数据 data = { "timestamp": [1629453592426, 1629453594429, 1629453654582, 1629453658662, 1629453661342, 1629453686644, 1629453689849], "type": [0, 0, 0, 1, 1, 0, 0], "value": [10, 120000, 110000, 22, 44, 115000, 50] } df = pd.DataFrame(data) # 构造匹配条件掩码 mask = ( df["type"].eq(df["type"].shift()) # 条件1:与上一行type相同,未发生变化 & (df["timestamp"].diff() < 60000) # 条件2:与上一行时间戳差值小于60000 & (df["value"].abs() > 100000) # 条件3:value绝对值大于100000 ) # 符合条件的value设为0 df.loc[mask, "value"] = 0
运行后得到的df和你给出的预期输出完全一致。
如果你想继续使用之前的分组思路,也可以用transform对每组内的非首行数据做判断:
# 你的原有代码 df["timestamp_jump"] = df["timestamp"].diff().gt(60000).cumsum() # 分组处理value df["value"] = df.groupby(["timestamp_jump", "type"])["value"].transform( lambda x: [x.iloc[0]] + [0 if abs(v) > 100000 else v for v in x.iloc[1:]] ) # 处理完可删除辅助列timestamp_jump df = df.drop("timestamp_jump", axis=1)
内容的提问来源于stack exchange,提问作者bhdrozgn
相关产品推荐
相关产品推荐

