我对熊猫和数据框非常陌生。我以前使用过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进行分组,因为这是唯一的,比较均值与首次访问。如果第二次访问大于第一次访问,则检查第三次访问,如果第三次访问小于第一次访问,则更改标签。因此,在示例表中,将14中的组更改为ThirdVisit,将25中的组更改为SecondVisit。我在想,也许在这种情况下创建一个新列作为名为checkVol的标志,而情况14将具有1。这就是我所拥有的,这是非常错误的:
checkVol = df.groupby('DOB').apply(lambda r: r)
#df.set_index('DOB', inplace=True)
df['checkVol'] = users
谢谢您的帮助。
凯文
答案 0 :(得分:1)
IIUC,您可以groupby
DOB
列,然后在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