You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按CLIENT_ID分组创建体重降幅≥10%的WEIGHT_LOSS标记列

解决方案

实现逻辑:数据已经提前按CLIENT_ID和ENCOUNTER_DATE完成排序,直接按CLIENT_ID分组后取前一行体重值做阈值判断即可,实现符合你要求的df.assign+np.where写法:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    "CLIENT_ID": [8222, 8222, 8222, 8222, 8300, 8300, 8300, 8300, 8300],
    "ENCOUNTER_DATE": ['2020-01-01', '2020-03-02', '2020-04-18', '2020-07-31', '2017-06-10', '2017-09-11', '2018-02-01', '2018-04-01', '2018-05-31'],
    "WEIGHT_KG": [56, 58, 50, 54, 71, 72, 74, 75, 65]
})

# 新增WEIGHT_LOSS标记列
df = df.assign(
    WEIGHT_LOSS = np.where(
        (df['WEIGHT_KG'] <= df.groupby('CLIENT_ID')['WEIGHT_KG'].shift(1) * 0.9).fillna(False),
        1,
        0
    )
)

逻辑说明

  • groupby('CLIENT_ID')['WEIGHT_KG'].shift(1) 取每个用户上一次测量的体重值,组内首行返回空值
  • 判断当前体重是否小于等于上一次体重的90%(即体重下降至少10%),空值对应的判断结果填充为False,对应组内首行默认赋值0的要求
  • 用np.where完成二值映射,最终通过assign方法将新列绑定到原DataFrame

运行后得到的WEIGHT_LOSS列结果为:[0, 0, 1, 0, 0, 0, 0, 0, 1],完全符合规则要求。

内容的提问来源于stack exchange,提问作者Mazil_tov998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:09:03