这里有一种使用3个口罩的方法。这样做的目的是识别必须更新的行,使用其类型、最新日期,以及是否标记为“Last”。然后,为这些行分配值
Updated_Marked
列行数取决于
ID 1
它与其他行共享
msk1 = df['Type'].isin(['abs','sqr','fun'])
msk2 = df['Date'] == df.groupby(['ID 1', msk1])['Date'].transform('max')
msk3 = df['Marked'] != 'Last'
df.loc[msk1 & msk2 & msk3, 'Updated_Marked'] = df[msk1 & msk2 & msk3].groupby('ID 1')['ID 1'].transform('count').gt(1).replace({True: 'Multiple', False: 'Last'})
df = df.fillna('')
输出:
ID 1 Type Name Date Marked Updated_Marked
0 1 abs 576 2009 Last
1 1 sqr 573 2020 Multiple
2 1 fun 234 2020 Multiple
3 1 no 556 2020
4 2 abs 364 2015
5 2 sqr 937 2019
6 2 fun 562 2020 Last
7 2 ok 794 2021
8 3 abs 846 2012 Last
9 3 fun 540 2015
10 3 sqr 276 2016 Last
11 3 no 649 2017