gpt4 book ai didi

python - 如何以有效的方式基于 pandas 中的其他行更新行

转载 作者:行者123 更新时间:2023-12-04 14:46:16 24 4
gpt4 key购买 nike

我想根据其他行更新 pandas df 行的值。

我有一个包含患者的数据框、他们需要接种的所有疫苗、一个指示他们是否已经接种疫苗的列,以及一个“状态”列,如果他们接种了疫苗,则为“Ok”,或者如果他们不这样做,则为“失踪”。

问题是有等效的疫苗。在下面的示例中,疫苗 B 和 C 是等效的。因此,如果患者接种了B疫苗,则不应接种C疫苗。因此,本例中B疫苗的正确状态为“Ok”,C疫苗为“已应用等效疫苗”。

数据框超过 200 万行,因此我需要一种有效的方法来构建“desired_status”列。

任何想法如何做到这一点?谢谢!

<表类="s-表"><头>患者疫苗应用了吗?状态desired_status<正文>1A1确定确定1B1确定确定1C0缺失应用等效疫苗2A0缺失缺失2B0缺失应用等效疫苗2C1确定确定3A1确定确定3B0缺失缺失3C0缺失缺失

PS:等效疫苗不一定在相邻行。

最佳答案

您可以使用字典来映射等价物,然后使用groupby+aggnumpy.select:

eq_vaccines = {'B': 'BC', 'C': 'BC'}

vac = df['vaccine'].map(eq_vaccines).combine_first(df['vaccine'])
applied_any = df.groupby(['patient', vac])['applied?'].transform('max').eq(1)

import numpy as np
df['status'] = np.select([df['applied?'].eq(1), applied_any],
['Ok', 'Applied equivalent vaccine'], 'Missing')

输出:

   patient vaccine  applied?                      status
0 1 A 1 Ok
1 1 B 1 Ok
2 1 C 0 Applied equivalent vaccine
3 2 A 0 Missing
4 2 B 0 Applied equivalent vaccine
5 2 C 1 Ok
6 3 A 1 Ok
7 3 B 0 Missing
8 3 C 0 Missing
为了清晰起见,带有中间体的表格
   patient vaccine  applied?                      status  vac  applied_any
0 1 A 1 Ok A 1
1 1 B 1 Ok BC 1
2 1 C 0 Applied equivalent vaccine BC 1
3 2 A 0 Missing A 0
4 2 B 0 Applied equivalent vaccine BC 1
5 2 C 1 Ok BC 1
6 3 A 1 Ok A 1
7 3 B 0 Missing BC 0
8 3 C 0 Missing BC 0

关于python - 如何以有效的方式基于 pandas 中的其他行更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69989894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com