【发布时间】:2025-12-27 04:50:11
【问题描述】:
我正在处理包含一些列的数据库,并且在按日期(格式 Y-m-d)对值进行排序后删除重复项。我的 df 如下所示:
id date name firstname
01 2020-04-01 max smith
04 2020-08-04 georges yellow
01 2020-05-31 smith
03 2020-02-24 emma blue
01 2020-01-02 maxime smith
02 2020-12-17 matt green
02 2020-04-05 matt
我的代码如下:
liste_id= list(df['id'].drop_duplicates())
df_ind = pd.DataFrame()
for i in range(len(liste_id)):
df_int = df[df['id'] == liste_id[i]]
df_int = df_int.loc[:,].sort_values(['date'], ascending=True).drop_duplicates("id", keep='last')
df_ind = df_ind.append(df_int)
我得到 df_ind:
id date name firstname
01 2020-05-31 smith
02 2020-12-17 matt green
03 2020-02-24 emma blue
04 2020-08-04 georges yellow
但我的目标是完成我的结果。我在最近的值中有一些 NaN,我想用旧行的数据替换它们。对于我的示例的第一个 id,我想用名字“max”完成我的 2020-05-31 行,因为它是最近完成的名字(2020-04-01)。Maxime 已完成,但日期是较旧(2020-01-02)。我希望 df_ind 看起来像这样:
id date name firstname
01 2020-05-31 max smith
02 2020-12-17 matt green
03 2020-02-24 emma blue
04 2020-08-04 georges yellow
我的问题是我有很多行(超过 600 000 ......)所以有人知道达到我的目标吗?并优化运行时间?
在此先谢谢你,抱歉我的英语不好..!
【问题讨论】:
-
目前我找到的解决方案是在 drop_duplicates 之前添加 fillna(method='bfill')。但这似乎需要很多时间..
标签: python pandas drop-duplicates