使用pandas分组计算患者治疗前后各指标的差值方法
实现方法
你可以通过透视表重塑数据后直接计算差值,效率更高,实现代码如下:
import pandas as pd # 原始数据构造 df = pd.DataFrame({'patient_id': ['p1', 'p2', 'p3', 'p1', 'p2', 'p3'], 'treatment_time': ['pre', 'pre', 'pre', 'post', 'post', 'post'], 'val1': [1, 4, 9, 2, 6, 10], 'val2': [3, 5, 11, 1, 4, 9], 'val3': [2, 4, 6, 3, 5, 7], }) # 核心逻辑:先按患者id、治疗阶段透视,再用治疗后数值减治疗前数值 df_pivot = df.pivot(index='patient_id', columns='treatment_time', values=['val1', 'val2', 'val3']) res = (df_pivot['post'] - df_pivot['pre']).reset_index() print(res)
运行上述代码后输出的res就是你要求的格式。
如果你更习惯用分组逻辑处理,也可以用groupby实现:
res = df.groupby('patient_id')[['val1', 'val2', 'val3']].apply( lambda x: x.loc[df['treatment_time'] == 'post'].values[0] - x.loc[df['treatment_time'] == 'pre'].values[0] ).reset_index()
内容的提问来源于stack exchange,提问作者Pavle
相关产品推荐
相关产品推荐

