基于唯一列值的比较,并根据条件设置一个标志

2024-10-03 21:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我对熊猫和数据帧非常陌生。我以前使用过SQL。我在下面附上了一张表:

    Sub     DOB         Groups      Mean Val  CheckVol
0   1112    1/1/1980    FirstVisit  6000      0
1   1121    2/2/1980    FirstVisit  6000      0
2   1138    3/3/1980    FirstVisit  6000      0
3   1227    4/4/1980    FirstVisit  6000      0
12  1443    1/1/1980    SecondVisit 5000      0
13  1443    2/2/1980    SecondVisit 5500      0
14  1481    3/3/1980    SecondVisit 6500      1
15  1482    4/4/1980    SecondVisit 5400      0
24  1483    2/2/1980    ThirdVisit  5400      0
25  1490    3/3/1980    ThirdVisit  5400      0

所以我想做的是根据DOB进行分组,因为这是唯一的比较平均val和首次就诊的方法。如果第二次就诊大于第一次就诊,则检查第三次就诊,如果第三次就诊小于第一次就诊,则更改标签。因此,在示例表中,将14组改为第三组,25组改为第二组。我在想,在本例中,可能会创建一个新列作为一个名为checkVol的标志,而案例14将有一个1。这是我所拥有的,这是非常错误的:

checkVol = df.groupby('DOB').apply(lambda r: r)
#df.set_index('DOB', inplace=True)
df['checkVol'] = users

谢谢你的帮助

凯文


Tags: 数据dfsqlvalmeangroupssubdob
1条回答
网友
1楼 · 发布于 2024-10-03 21:27:57

IIUC,您可以groupbyDOB列,然后使用您描述的条件对Mean Val列进行转换。这将返回一个布尔列,因此您只需将其转换为int

df['CheckVol'] = df.groupby('DOB')['Mean Val'].transform(lambda x: x > x.iloc[0]).astype(int)

>>> df
     Sub       DOB       Groups  Mean Val  CheckVol
0   1112  1/1/1980   FirstVisit      6000         0
1   1121  2/2/1980   FirstVisit      6000         0
2   1138  3/3/1980   FirstVisit      6000         0
3   1227  4/4/1980   FirstVisit      6000         0
12  1443  1/1/1980  SecondVisit      5000         0
13  1443  2/2/1980  SecondVisit      5500         0
14  1481  3/3/1980  SecondVisit      6500         1
15  1482  4/4/1980  SecondVisit      5400         0
24  1483  2/2/1980   ThirdVisit      5400         0
25  1490  3/3/1980   ThirdVisit      5400         0

相关问题 更多 >