计算Pandas每组的数字差异

2024-03-29 02:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

怎样才能在熊猫身上做到最优雅呢?你知道吗


Tags: 数据患者idnan结构timestampmeasurementdelta
1条回答
网友
1楼 · 发布于 2024-03-29 02:29:58

调用'measurement'列上的^{}并传递方法^{},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

相关问题 更多 >