pandas - 在 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 来说必须是可行的,无论如何。任何想法?
非常感谢你的帮助。
亲切的问候,
尼古拉斯
解决方案
我尝试了友好给出的答案,没有一个有效,得到了我无法修复的错误。不知道为什么......我设法使用以下方法制作了一些接近的东西:
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"]
这不是很漂亮,我知道...
推荐阅读
- mobile - Android/iOS 上的 Twilio 可编程语音 - 拨打电话时传递自定义信息
- java - 泛型,不适用于 List 的参数
当方法参数是(列表 调用方法maximum时我在eclipse上遇到错误,说方法
maximum (<? extends T>, int, int) in the type generics classname is not applicable for the argument (List<Integer>, int ,int).
- java - java I/O 尝试使用二进制数据参数的资源?
- go - 解析地图的 yaml 错误
- swift - Xcode:将对象与视图控制器边距对齐
- android - 有没有办法在 Android 上运行 nodejs 浏览器自动化?
- php - php中的文件创建和文件写入
- python - python beautifulsoup - 拉一个列表/字典
- css - 嵌套 SVG 绝对定位
- python - 检索嵌套 JSON 数据时出现关键错误