【发布时间】:2021-09-14 11:02:53
【问题描述】:
我有一个数据框 df:
import pandas as pd
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]})
按CLIENT_ID和ENCOUNTER_DATE排序
| CLIENT_ID | ENCOUNTER_DATE | WEIGHT_KG |
|---|---|---|
| 8222 | 2020-01-01 | 56 |
| 8222 | 2020-03-02 | 58 |
| 8222 | 2020-04-18 | 50 |
| 8222 | 2020-07-31 | 54 |
| 8300 | 2017-06-10 | 71 |
| 8300 | 2017-09-11 | 72 |
| 8300 | 2018-02-01 | 74 |
| 8300 | 2018-04-01 | 75 |
| 8300 | 2018-05-31 | 65 |
我想创建一个WEIGHT_LOSS 标志列,如果当前WEIGHT_KG 比之前的测量值至少低10%,则为1,否则为0,对于每个CLIENT_ID,结果如下表:
| CLIENT_ID | ENCOUNTER_DATE | WEIGHT_KG | WEIGHT_LOSS |
|---|---|---|---|
| 8222 | 2020-01-01 | 56 | 0 |
| 8222 | 2020-03-02 | 58 | 0 |
| 8222 | 2020-04-18 | 50 | 1 |
| 8222 | 2020-07-31 | 54 | 0 |
| 8300 | 2017-06-10 | 71 | 0 |
| 8300 | 2017-09-11 | 72 | 0 |
| 8300 | 2018-02-01 | 74 | 0 |
| 8300 | 2018-04-01 | 75 | 0 |
| 8300 | 2018-05-31 | 65 | 1 |
df.assign、np.where 或列表理解可能很容易回答。
【问题讨论】:
标签: python pandas dataframe apply where-clause