我有一个 Dataframe ,如下所示(link to csv):
id, time, value, approved
0, 0:00, 10, false
1, 0:01, 20, false
1, 0:02, 50, false
1, 0:03, 20, true
1, 0:04, 40, true
1, 0:05, 40, true
1, 0:06, 20, false
2, 0:07, 35, false
2, 0:08, 35, false
2, 0:09, 50, true
2, 0:10, 50, true
我想计算一个列,该列对于每个ID的第一个最大批准值应该为真。因此,它应该如下所示:
id, time, value, approved, is_max
0, 0:00, 10, false, false
1, 0:01, 20, false, false
1, 0:02, 50, false, false
1, 0:03, 20, true, false
1, 0:04, 40, true, true
1, 0:05, 40, true, false
1, 0:06, 20, false, false
2, 0:07, 35, false, false
2, 0:08, 35, false, false
2, 0:09, 50, true, true
2, 0:10, 50, true, false
我可以通过
df['is_max'] = df['value'] == df.groupby(['id', df['approved']])['value'].transform('max').where(df['approved'])
但这会将每个ID具有最大值的两行都设置为true(ID 1为0:04和0:05| 0:09和0:10(对于ID 2)。我只想将具有最大值的第一行设置为true。
1条答案
按热度按时间szqfcxe21#
以下是根据您的解决方案使用
pandas.DataFrame.mask
的方法:#输出: