Python 有几个条件的分组

Python 有几个条件的分组,python,pandas,Python,Pandas,我有一个数据帧df user id status date 1 accepted 1/10/2020 2 rejected 2/11/2020 3 accepted 3/8/2020 1 rejected 25/09/2020 3 accepted 11/10/2020 我想要的输出: user id status date last operatio

我有一个数据帧df

user id   status     date 
1         accepted   1/10/2020
2         rejected   2/11/2020
3         accepted   3/8/2020
1         rejected   25/09/2020
3         accepted   11/10/2020
我想要的输出:

user id   status     date          last operation   rejected 
1         accepted   1/10/2020          1              1
2         rejected   2/11/2020          0              0
3         accepted   3/8/2020           0              0
1         rejected   25/09/2020         0              0
3         accepted   11/10/2020         1              0
对于最后一个操作列,如果有日期低于此用户日期的行,我将检查相同的用户id。 和拒绝列,如果有日期和状态较低的行被拒绝,则为相同的用户id


谢谢

的想法是,如果
最后一个
被拒绝的
不相等,则对每个组比较最小
日期
,如果至少有一个匹配的最小值被
拒绝
并设置组的所有值,最后一个链带有
m1
并通过以下方式将
真/假
转换为
1/0

编辑:


答案被编辑了,你能测试吗?
df['date'] = pd.to_datetime(df['date'], dayfirst=True)

df = df.sort_values(['user id','date'])

s = df.groupby('user id')['date'].transform('min')
m1 = s.ne(df['date'])

m3 = df['status'].mask(m1).eq('rejected').groupby(df['user id']).transform('any')

df['last1'] =  m1.groupby(df['user id']).cumsum()
df['rejected1'] = df['last1'].where(m3, 0)

df = df.sort_index()
print (df)