首页 > 解决方案 > 在 Pandas 数据框中保留值

问题描述

考虑以下 Pandas 数据框:

_df = pd.DataFrame([
    [4.0, "Diastolic Blood Pressure", 1.0, "2017-01-15", 68],
    [4.0, "Diastolic Blood Pressure", 5.0, "2017-04-15", 60],
    [4.0, "Diastolic Blood Pressure", 8.0, "2017-06-18", 68],
    [4.0, "Heart Rate", 1.0, "2017-01-15", 85],
    [4.0, "Heart Rate", 5.0, "2017-04-15", 72],
    [4.0, "Heart Rate", 8.0, "2017-06-18", 81],
    [6.0, "Diastolic Blood Pressure", 1.0, "2017-01-18", 114],
    [6.0, "Diastolic Blood Pressure", 6.0, "2017-02-18", 104],
    [6.0, "Diastolic Blood Pressure", 9.0, "2017-03-18", 124]
    ], columns = ['ID', 'VSname', 'Visit', 'VSdate', 'VSres'])

我想在这个 df 中创建“标志”变量:对于每个 ID 和 VSName,在每次访问时显示与基线(访问 1)的差异。

在此处输入图像描述

我尝试了不同的方法,但我被卡住了。

我来自 SAS 编程背景,在 SAS 中很容易将值从一行保留到另一行,然后减去。我确信我的思想被 SAS 污染了(而且标题显然是错误的),但这对于 Pandas 来说必须是可行的,无论如何。任何想法?

非常感谢你的帮助。

亲切的问候,

尼古拉斯

标签: pandasdataframe

解决方案


我尝试了友好给出的答案,没有一个有效,得到了我无法修复的错误。不知道为什么......我设法使用以下方法制作了一些接近的东西:

baseline = df[df["Visit"] ==  1.0]
baseline = baseline.rename(columns={'VSres': 'baseline'})
df = pd.merge(df, baseline, on = ["ID", "VSname"], how='left')
df["chg"] = df["VSres"] - df["baseline"]

这不是很漂亮,我知道...


推荐阅读