根据 Pandas Dataframe 中组的最大值计算新列值

问题描述 投票:0回答:1

我有包含受试者列表+配药日期的数据框,一个受试者有多个配药日期,并且一个受试者的一个配药日期可能会出现多次。这是例子:

{'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)}}
  • 我想要的是添加到 df 新列,其中如果配药日期是给定主题的第 2 到最大,则为 TRUE,对于所有其他情况为 False。

因此,对于主题 CZ100030005,如果该行中的配药日期为 2024 年 8 月 28 日,则添加的列中将为 True,因为这是配药日期的第二个最大值。

我能够找到每组的最大值

maxima = df_cov.groupby('Subject')['Date Dispensed'].max()
,但我无法找到第二个最大值。

我根本无法执行第二步,即根据第二个最大值是否等于/不等于当前行日期分配值来创建新列 True/False。

您能给点建议吗?

python pandas dataframe group-by grouping
1个回答
0
投票

首先,转换为日期时间以进行正确比较

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 错误

© www.soinside.com 2019 - 2024. All rights reserved.