gpt4 book ai didi

python - Pandas - 拆分、重构和重载 ID 列

转载 作者:行者123 更新时间:2023-12-01 09:31:32 24 4
gpt4 key购买 nike

我有一个 pandas DataFrame,其中包含 patent_idpatent_sexpatent_dob 列(以及其他不太相关的列)。行可以有重复的 patent_id,因为每个患者在多个医疗程序的数据中可能有多个条目。然而,我发现很多 patent_id 都重载了,即多个患者被分配给同一个 ID(单个 patent_id 的许多实例就证明了这一点) > 与多种性别和多天出生有关)。

为了重构 ID,使每个患者都有一个唯一的 ID,我的计划是不仅按 patent_id 对数据进行分组,还按 patent_sexpatent_dob 对数据进行分组 也是如此。我认为这必须足以将数据分离到各个用户中(如果两个具有相同性别和出生日期的患者恰好被分配了相同的 ID,那就这样吧。

这是我当前使用的代码:

# I just use first() here as a way to aggregate the groups into a DataFrame.
# Bonus points if you have a better solution!
indv_patients = patients.groupby(['patient_id', 'patient_sex', 'patient_dob']).first()

# Create unique ids
new_patient_id = 'new_patient_id'
for index, row in indv_patients.iterrows():
# index is a tuple of the three column values, so this should get me a unique
# patient id for each patient
indv_patients.loc[index, new_patient_id] = str(hash(index))

# Merge new ids into original patients frame
patients_with_new_ids = patients.merge(indv_patients, left_on=['patient_id', 'patient_sex', 'patient_dob'], right_index=True)

# Remove byproduct columns, and original id column
drop_columns = [col for col in patients_with_new_ids.columns if col not in patients.columns or col == new_patient_id]
drop_columns.append('patient_id')
patients_with_new_ids = patients_with_new_ids.drop(columns=drop_columns)

patients = patients_with_new_ids.rename(columns={new_patient_id : 'patient_id'})

问题是,对于超过 700 万患者来说,这是一个太慢的解决方案,最大的瓶颈是 for 循环。所以我的问题是,有没有更好的方法来修复这些重载的 id? (实际 ID 并不重要,只要每个患者的 ID 是唯一的即可)

最佳答案

我不知道这些列的值是什么,但你尝试过这样的事情吗?

patients['new_patient_id'] = patients.apply(lambda x: x['patient_id'] + x['patient_sex'] + x['patient_dob'],axis=1)

这应该创建一个新列,然后您可以将 groupby 与 new_Patent_id 一起使用

关于python - Pandas - 拆分、重构和重载 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49926867/

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