如何快速查找Pandas DataFrame中重复行索引的行及映射原索引
解决方案
这里有一套高效的Pandas内置方法实现方案,全程无需循环,完全符合你的需求:
1. 先还原你的数据场景
import pandas as pd # 原DataFrame df = pd.DataFrame({ "A": [["ab", "cd"], ["cd", "de"], ["de", "ef"], ["gh"]], "B": [1, 2, 1, 1] }) # 执行拆分操作 df_exploded = df.explode("A")
2. 筛选出索引出现多次的行
利用index.value_counts()快速统计每个索引的出现频次,再筛选出频次≥2的索引,最后用这些索引过滤拆分后的DataFrame:
# 获取出现次数≥2的原索引 repeat_indices = df_exploded.index.value_counts()[lambda cnt: cnt >= 2].index # 提取目标行 target_rows = df_exploded.loc[repeat_indices]
这一步是矢量化操作,比循环df.loc[i]效率高得多,适合处理大数据量。
3. 关联原DataFrame的对应行
如果需要获取这些索引对应的原DataFrame记录,直接用repeat_indices去原表提取即可:
original_records = df.loc[repeat_indices]
original_records的索引就是原DataFrame的真实索引(0、1、2),对应原数据中包含多个元素的行。
可选:保留原索引映射
如果后续操作可能修改拆分后DataFrame的索引,可以提前新增一列存储原索引,避免丢失映射关系:
df_exploded["original_idx"] = df_exploded.index
内容的提问来源于stack exchange,提问作者arc_lupus
相关产品推荐
相关产品推荐

