gpt4 book ai didi

python - 在 numpy 中快速找到对称对

转载 作者:行者123 更新时间:2023-12-03 01:00:44 25 4
gpt4 key购买 nike

from itertools import product
import pandas as pd

df = pd.DataFrame.from_records(product(range(10), range(10)))
df = df.sample(90)
df.columns = "c1 c2".split()
df = df.sort_values(df.columns.tolist()).reset_index(drop=True)
# c1 c2
# 0 0 0
# 1 0 1
# 2 0 2
# 3 0 3
# 4 0 4
# .. .. ..
# 85 9 4
# 86 9 5
# 87 9 7
# 88 9 8
# 89 9 9
#
# [90 rows x 2 columns]

如何快速查找、识别和删除此数据框中所有对称对的最后一个重复项?

对称对的一个示例是“(0, 1)”等于“(1, 0)”。后者应该被删除。

算法一定要快,所以推荐使用numpy。不允许转换为 python 对象。

最佳答案

您可以对值进行排序,然后groupby:

a= np.sort(df.to_numpy(), axis=1)
df.groupby([a[:,0], a[:,1]], as_index=False, sort=False).first()

选项 2:如果有很多对 c1, c2groupby 可能会很慢。在这种情况下,我们可以分配新值并通过 drop_duplicates 进行过滤:

a= np.sort(df.to_numpy(), axis=1) 

(df.assign(one=a[:,0], two=a[:,1]) # one and two can be changed
.drop_duplicates(['one','two']) # taken from above
.reindex(df.columns, axis=1)
)

关于python - 在 numpy 中快速找到对称对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com