gpt4 book ai didi

python - 在 Pandas Dataframe 中查找非唯一行

转载 作者:行者123 更新时间:2023-12-05 09:01:46 28 4
gpt4 key购买 nike

假设我有一个像这样的 pandas 数据框:

<表类="s-表"><头>博士患者天数<正文>亚伦杰夫23亚伦乔希46亚伦乔希71杰西曼尼55杰西曼尼85杰西曼尼46

我想提取医生和病人的组合不止一次出现的数据帧。我将对采购的数据框做进一步的工作。

所以,例如,在这个例子中,dataframe

<表类="s-表"><头>博士患者天数<正文>亚伦乔希46亚伦乔希71

将被提取 和数据框

<表类="s-表"><头>博士患者天数<正文>杰西曼尼55杰西曼尼85杰西曼尼46

将被提取

按照我的条件,dataframe

<表类="s-表"><头>博士患者天数<正文>亚伦杰夫23

不会被提取,因为 Aaron 和 Jeff 的组合只出现一次。

现在,我有一个包含 400000 行的数据框,我认为到目前为止我编写的代码在获取我想要的数据框方面效率低下。这是代码:

    doctors = list(df_1.Doctor.unique()) # df_1 being the dataframe with 400K rows 
for doctor in doctors:
df_2 = df_1[df_1['Doctor'] == doctor] # extract one sub-dataframe per doctor
patients = list(df_2.Patient.unique())
for patient in patients:
df_3 = df_2[df_2['patient'] == patient] # extract one sub-sub-dataframe per doctor and patient
if len(df_3) >= 2:
# do something

如您所见,这已经接近 O(n^2) 运行时间(我说接近是因为每列中没有 400K 个唯一值)。有没有办法最小化运行时间?如果是这样,如何改进我的代码?

谢谢!

乌梅什

最佳答案

你可以用groupby检查

d = {x : y  for x, y in df.groupby(['Doctor','Patient']) if len(y) > 1}
d
Out[36]:
{('Aaron', 'Josh'): Doctor Patient Days
1 Aaron Josh 46
2 Aaron Josh 71, ('Jess', 'Manny'): Doctor Patient Days
3 Jess Manny 55
4 Jess Manny 85
5 Jess Manny 46}

关于python - 在 Pandas Dataframe 中查找非唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72651199/

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