带条件计算表格字段差值的实现方法咨询
带条件差值计算实现方案(基于Python Pandas)
核心思路
利用Pandas的条件赋值能力,先计算差值序列,再通过条件过滤仅保留match为True行的结果,其余位置填充NaN。
完整实现代码
1. 导入依赖并构造测试数据
import pandas as pd import numpy as np # 构造和示例一致的源数据 df = pd.DataFrame({ 'TimeStamp': [38563, 38568, 38577, 38580, 38589, 38591], 'Input': ['aaaaa', 'bbb', 'aaaaa', 'bbb', 'bbb', 'aaaaa'], 'match': [False, False, False, False, True, False] })
2. 按需求计算diff列
如果你的diff规则是:match为True时,计算当前行和同Input分组内上一行的TimeStamp差值,使用以下代码:
df['diff'] = df.groupby('Input')['TimeStamp'].diff().where(df['match'], np.nan)
如果diff规则是:match为True时,计算当前行和全局上一行的TimeStamp差值,去掉分组逻辑即可:
df['diff'] = df['TimeStamp'].diff().where(df['match'], np.nan)
如果你的diff是其他自定义计算规则,只需把where之前的部分替换为你的差值计算逻辑即可,where的条件过滤逻辑通用。
运行结果示例(同Input分组差值场景)
| 序号 | TimeStamp | Input | match | diff |
|---|---|---|---|---|
| 0 | 38563 | aaaaa | False | NaN |
| 1 | 38568 | bbb | False | NaN |
| 2 | 38577 | aaaaa | False | NaN |
| 3 | 38580 | bbb | False | NaN |
| 4 | 38589 | bbb | True | 9.0 |
| 5 | 38591 | aaaaa | False | NaN |
若你示例中diff=1是其他自定义计算逻辑,只需替换where方法前的差值计算部分即可,条件过滤逻辑通用。
内容的提问来源于stack exchange,提问作者CHL
相关产品推荐
相关产品推荐

