python - 计算 pandas 中每组的数值差异

标签 python python-2.7 pandas time-series dataframe

我的数据框具有以下结构:

patient_id  |  timestamp  |  measurement
A           |  2014-10-10 |  5.7
A           |  2014-10-11 |  6.3
B           |  2014-10-11 |  6.1
B           |  2014-10-10 |  4.1

我想计算每位患者每次测量结果之间的delta(差异)。

结果应如下所示:

patient_id  |  timestamp  |  measurement  |    delta
A           |  2014-10-10 |  5.7          |     NaN
A           |  2014-10-11 |  6.3          |     0.6
B           |  2014-10-11 |  6.1          |     2.0
B           |  2014-10-10 |  4.1          |     NaN

如何在 pandas 中最优雅地完成此操作?

最佳答案

调用transform在“测量”列上并传递方法 diff ,transform 返回一个索引与原始 df 对齐的序列:

In [4]:

df['delta'] = df.groupby('patient_id')['measurement'].transform(pd.Series.diff)
df
Out[4]:
  patient_id   timestamp  measurement  delta
0          A  2014-10-10          5.7    NaN
1          A  2014-10-11          6.3    0.6
2          B  2014-10-10          4.1    NaN
3          B  2014-10-11          6.1    2.0

编辑

如果您打算对 transform 的结果进行某种排序,请先对 df 进行排序:

In [10]:

df['delta'] = df.sort(columns=['patient_id', 'timestamp']).groupby('patient_id')['measurement'].transform(pd.Series.diff)
df
Out[10]:
  patient_id   timestamp  measurement  delta
0          A  2014-10-10          5.7    NaN
1          A  2014-10-11          6.3    0.6
2          B  2014-10-11          6.1    2.0
3          B  2014-10-10          4.1    NaN

关于python - 计算 pandas 中每组的数值差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28178740/

相关文章:

python - 如何为不可变类型实现 "__iadd__()"?

python - 删除不包含子字符串的行后如何返回数据框

文件中的 Python ElementTree.parse() 不会关闭文件

python - 根据两个不同列的日期获取交叉联接表的唯一记录时,如何提高逻辑的速度/内存?

python - 使用 pd.DataFrame 中的 MultiIndex 绘制数据

python - 如何测试网页是否为图片

Python安装pyrit报错,CentOS下命令gcc

python - 属性错误 : 'module' object has no attribute 'urls'

python - Pandas OHLC 对 OHLC 数据的聚合

python - 当 pandas 总是显示 "No such file or directory"时,如何让 pandas 读取 CSV 文件?