如何实现基于datetime列的DataFrame随机化drop_duplicates?
实现Pandas按日期列随机去重的方法
Pandas的drop_duplicates方法确实没有keep='random'这个参数,不过可以通过两种简单的方式实现随机保留重复项的需求:
方法一:先打乱行顺序再去重
先对整个DataFrame的行进行随机打乱,再执行去重操作,此时keep='first'保留的就是随机位置的行:
# 随机打乱所有行,frac=1表示取全部数据 df_shuffled = df_filtered.sample(frac=1) # 按date列去重,保留打乱后的第一条(即随机项) df_shuffled.drop_duplicates(subset=['date'], keep='first', inplace=True) # 可选:如果需要恢复原索引的顺序,可执行排序 df_result = df_shuffled.sort_index()
如果需要固定随机结果(方便复现),可以给sample方法加上random_state参数,比如sample(frac=1, random_state=42)。
方法二:分组后随机选取单行
直接按date列分组,每组随机抽取一行,这种方法更高效,尤其适合大数据集:
# 按date分组,每组随机选1行 df_result = df_filtered.groupby('date').sample(n=1)
同样,添加random_state参数可以固定随机结果,比如sample(n=1, random_state=123)。
两种方法都能实现你要的随机去重效果,根据自己的需求选择即可。
内容的提问来源于stack exchange,提问作者a7dc
相关产品推荐
相关产品推荐

