我有包含受试者列表+配药日期的数据框,一个受试者有多个配药日期,并且一个受试者的一个配药日期可能会出现多次。这是例子:
{'Subject': {1449: 'CZ100030006',
1786: 'CZ100030006',
1958: 'CZ100030006',
1964: 'CZ100030006',
4067: 'CZ100030006',
4119: 'CZ100030006',
4143: 'CZ100030006',
4441: 'CZ100030006',
4467: 'CZ100030006',
4530: 'CZ100030006',
4532: 'CZ100030006',
4585: 'CZ100030006',
4703: 'CZ100030006',
4767: 'CZ100030006',
4850: 'CZ100030006',
4888: 'CZ100030006',
4974: 'CZ100030006',
4987: 'CZ100030006',
5108: 'CZ100030006',
5476: 'CZ100030006',
9768: 'CZ100030005',
9815: 'CZ100030005',
9822: 'CZ100030005',
9837: 'CZ100030005',
9852: 'CZ100030005',
9853: 'CZ100030005',
9889: 'CZ100030005',
9945: 'CZ100030005',
10009: 'CZ100030005',
10050: 'CZ100030005',
10052: 'CZ100030005',
10060: 'CZ100030005',
11532: 'CZ100030005',
11582: 'CZ100030005',
11640: 'CZ100030005',
11722: 'CZ100030005',
13267: 'CZ100030005',
13339: 'CZ100030005',
13354: 'CZ100030005',
13655: 'CZ100030005'},
'Date Dispensed': {1449: datetime.date(2024, 7, 4),
1786: datetime.date(2024, 7, 4),
1958: datetime.date(2024, 6, 21),
1964: datetime.date(2024, 6, 21),
4067: datetime.date(2024, 9, 16),
4119: datetime.date(2024, 9, 16),
4143: datetime.date(2024, 7, 19),
4441: datetime.date(2024, 7, 19),
4467: datetime.date(2024, 7, 19),
4530: datetime.date(2024, 7, 19),
4532: datetime.date(2024, 9, 16),
4585: datetime.date(2024, 7, 19),
4703: datetime.date(2024, 10, 11),
4767: datetime.date(2024, 7, 19),
4850: datetime.date(2024, 7, 19),
4888: datetime.date(2024, 7, 19),
4974: datetime.date(2024, 10, 11),
4987: datetime.date(2024, 9, 16),
5108: datetime.date(2024, 10, 11),
5476: datetime.date(2024, 10, 11),
9768: datetime.date(2024, 7, 4),
9815: datetime.date(2024, 7, 4),
9822: datetime.date(2024, 8, 28),
9837: datetime.date(2024, 7, 4),
9852: datetime.date(2024, 7, 4),
9853: datetime.date(2024, 7, 4),
9889: datetime.date(2024, 8, 28),
9945: datetime.date(2024, 7, 4),
10009: datetime.date(2024, 7, 4),
10050: datetime.date(2024, 7, 4),
10052: datetime.date(2024, 8, 28),
10060: datetime.date(2024, 8, 28),
11532: datetime.date(2024, 6, 20),
11582: datetime.date(2024, 6, 5),
11640: datetime.date(2024, 6, 20),
11722: datetime.date(2024, 6, 5),
13267: datetime.date(2024, 9, 25),
13339: datetime.date(2024, 9, 25),
13354: datetime.date(2024, 9, 25),
13655: datetime.date(2024, 9, 25)}}
因此,对于主题 CZ100030005,如果该行中的配药日期为 2024 年 8 月 28 日,则添加的列中将为 True,因为这是配药日期的第二个最大值。
我能够找到每组的最大值
maxima = df_cov.groupby('Subject')['Date Dispensed'].max()
,但我无法找到第二个最大值。
我根本无法执行第二步,即根据第二个最大值是否等于/不等于当前行日期分配值来创建新列 True/False。
您能给点建议吗?
首先,转换为日期时间以进行正确比较
df['Date Dispensed'] = pd.to_datetime(df['Date Dispensed'])
第二,找到每个主题的第二个最大日期
second_max_dates = df.groupby('Subject')['Date Dispensed'].apply(lambda x: x.nlargest(2).iloc[-1])
添加第二个最大值的新列来处理布尔值
print(df)
结果示例:
主题发放日期为第二个最大日期
0 CZ100030006 2024-07-04 错误