【发布时间】:2020-12-10 22:39:15
【问题描述】:
我有一个大数据框,在 358 个样本中有超过 10 万个变量(行)。
我想知道所有样本中哪些变量相同(重复)。
示例数据框如下:
Sample1 Sample2 Sample3 Sample4 Sample5
1000084 0.0 0.0 0.0 0.0 0.0
1000092 0.0 0.0 0.0 0.0 0.0
1000096 0.0 0.0 1.0 0.0 0.0
1000110 0.0 0.0 1.0 0.0 0.0
1000116 0.0 0.0 0.0 0.0 0.0
我需要的结果可能是这样的:或相同行列表的列表
{1000084:[1000092, 1000116], 1000096:[1000110]}
我尝试了 pandas 的复制方法,但它只会留下唯一项目或唯一项目加上第一个或最后一个重复项。
我尝试使用此代码,但需要很长时间:
duplicated_index = set()
duplicates = {}
for i, pos in enumerate(df.index, 0):
#check if the row has marked as duplicate, if so, ignore it
if i in duplicated_index:
continue
for j in range(i+1, df.shape[0]):
if all(df.iloc[i] == df.iloc[j]):
duplicated_index.add(j)
tmp = duplicates.setdefault(pos, [])
duplicates[pos].append(df.iloc[j].name)
有没有更合适的方法来获取这个列表并识别哪些行与其他行相同?
【问题讨论】:
-
{1000084:[1000092, 1000116], 1000096:[1000110]} 什么?这里的关键是什么?
-
按所有列分组。
-
您可能想要选择其他解决方案之一。它们的执行时间并不受列数的影响,而我的执行时间与列数和行数成线性关系。对于具有 no 重复项的 (100000,300) DataFrame,它们的速度更快。
-
@wwii,您的运行良好,速度也非常快,不到一分钟。此外,你有一个更全面、明确和清晰的答案,帮助我更好地理解 groupby 方法是如何工作的。谢谢!