gpt4 book ai didi

python - 删除反向重复项

转载 作者:行者123 更新时间:2023-11-30 22:35:42 25 4
gpt4 key购买 nike

我的数据框如下所示:

df_in = pd.DataFrame(data={'mol1':['cpd1','cpd2', 'cpd3'], 'mol2': ['cpd2','cpd1', 'cpd4'], 'sim': [0.8,0.8,0.9]})

print(df_in)

mol1 mol2 sim
0 cpd1 cpd2 0.8
1 cpd2 cpd1 0.8
2 cpd3 cpd4 0.9

尽管每个元素不属于同一列,但该对 (cpd1, cpd2) 出现两次。

我想删除这些重复项以得到以下结果:

df_out = pd.DataFrame(data={'mol1':['cpd1', 'cpd3'], 'mol2': ['cpd2', 'cpd4'], 'sim': [0.8,0.9]})

print(df_out)

mol1 mol2 sim
0 cpd1 cpd2 0.8
1 cpd3 cpd4 0.9

如果我忽略第三列,Pythonic way of removing reversed duplicates in list中有一个解决方案描述,但我必须保留此列。

最佳答案

您可以将sortedapply一起使用对于列表 cols 中的列,然后 drop_duplicates :

cols = ['mol1','mol2']
df[cols] = df[cols].apply(sorted, axis=1)
df = df.drop_duplicates()
print (df)
mol1 mol2 sim
0 cpd1 cpd2 0.8
2 cpd3 cpd4 0.9

numpy.sort 类似的解决方案:

cols = ['mol1','mol2']
df[cols] = np.sort(df[cols].values, axis=1)
df = df.drop_duplicates()
print (df)
mol1 mol2 sim
0 cpd1 cpd2 0.8
2 cpd3 cpd4 0.9

如果需要仅在cols中检查重复项,请添加参数subset:

df = pd.DataFrame(
{'mol1':['cpd1','cpd2', 'cpd3'],
'mol2': ['cpd2', 'cpd1', 'cpd4'],
'sim': [0.7,0.8,0.9]})
print (df)
mol1 mol2 sim
0 cpd1 cpd2 0.7
1 cpd2 cpd1 0.8
2 cpd3 cpd4 0.9

cols = ['mol1','mol2']
df[cols] = np.sort(df[cols].values, axis=1)
df = df.drop_duplicates(subset=cols)
print (df)
mol1 mol2 sim
0 cpd1 cpd2 0.7
2 cpd3 cpd4 0.9

关于python - 删除反向重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44456186/

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