有没有什么有效的方法来执行groupby并在大型 Dataframe 中执行前向填充?我有一个包含2768186062行的 Dataframe ,如下所示:
email email_created_date country
a01423240@itesm.mx 2021-03-27 00:44:49+00:00 NaN
a01423240@itesm.mx 2022-01-14 16:27:18+00:00 IND
aalvarezleo@gmail.com 2021-05-14 13:24:15+00:00 NaN
aalvarezleo@gmail.com 2021-09-16 16:09:45+00:00 IND
acabazot@gmail.com 2021-03-27 00:38:37+00:00 NaN
acabazot@gmail.com 2022-01-14 12:25:28+00:00 IND
alt_wwe@hotmail.com 2022-09-22 22:08:50+00:00 NaN
alt_wwe@hotmail.com 2022-09-22 22:11:51+00:00 CA
我想根据同一封电子邮件向后填充国家列,因此预期输出如下所示:
email email_created_date country
a01423240@itesm.mx 2021-03-27 00:44:49+00:00 IND
a01423240@itesm.mx 2022-01-14 16:27:18+00:00 IND
aalvarezleo@gmail.com 2021-05-14 13:24:15+00:00 IND
aalvarezleo@gmail.com 2021-09-16 16:09:45+00:00 IND
acabazot@gmail.com 2021-03-27 00:38:37+00:00 IND
acabazot@gmail.com 2022-01-14 12:25:28+00:00 IND
alt_wwe@hotmail.com 2022-09-22 22:08:50+00:00 CA
alt_wwe@hotmail.com 2022-09-22 22:11:51+00:00 CA
我使用下面的代码完成了这一步:
dt1[['country']]=(dt1
.sort_values(['email','email_created_date'])
.groupby(['email'], as_index=False)[['country']].fillna(method='bfill'))
但是由于 Dataframe 非常大,执行上述代码花费了很多时间(超过一个小时)。2有人能建议/帮助以最有效的方式执行上述操作吗?3我想确保我尽可能地高效(我的计算机花了很长时间来读取所有这些文件并将其合并到内存中)。4请帮助!
1条答案
按热度按时间xzlaal3s1#
下面是一个如何提高效率的示例:
此代码首先定义函数bfill_country,该函数将DataFrame作为输入,并返回一个国家列向后填充的序列。然后,它使用groupby和apply方法将此函数分别应用于每个组,并将结果赋回原始DataFrame的国家列。
这应该比您建议的解决方案更快,因为它避免了一次填充所有缺失值,而是一次填充一组。
如果有帮助就告诉我!