python - 删除从笛卡尔积/交叉连接获得的列值中具有相同顺序的行。如果行值为 AB,其他值为 BA。我只需要AB
问题描述
如何删除从笛卡尔积/交叉连接获得的列值中具有相同顺序的行。例如,如果具有列值的行是 AB,而其他行是 BA。我只需要1行AB。?请注意,我正在为从 Cartseian 产品中获得的巨大数据集执行此操作。因此,处理时间和内存使用是关键(我只有 8GB 内存)——行数是 1000 万行乘 2000 列?例如,请参见下图。
期望的输出:
解决方案
我能想到的两种方法。
df = pd.DataFrame({"UserName_x":["A","B","A","C"],
"UserName_y":["B","A","C","A"],
"edge":["AB","BA","AC","CA"]})
方法 1:edge
按字母顺序对字符串进行排序,并且drop_duplicates
:
df["sorted"] = df["edge"].apply(lambda x: ''.join(sorted(x)))
print (df.drop_duplicates(subset="sorted"))
#
UserName_x UserName_y edge sorted
0 A B AB AB
2 A C AC AC
方法2:首先创建一个没有重复的用户产品,然后检查isin
:
from itertools import combinations_with_replacement
unique = df["UserName_x"].unique().tolist()
combos = ["".join(i) for i in combinations_with_replacement(unique,2)]
print (df[df["edge"].isin(combos)])
#
UserName_x UserName_y edge sorted
0 A B AB AB
2 A C AC AC
推荐阅读
- java - 无法执行目标 org.sonarsource.scanner.maven 对于工件 {null:null:null:jar}:groupId 不能为空
- powershell - 为什么论证没有生效?
- python - 使用 fit_generator() 在数据生成器中应用 model.predict() 时出现问题
- python - 列表理解中的两个值
- c# - 具有默认值的枚举的 C# Swagger 生成
- css - 在媒体查询中设置 CSS 变量可靠吗?
- python - 如何获取用户角色
- angular - 为什么我必须单击两次才能执行我的功能?
- python-3.x - 不使用任何软件包的 2d 绘图仪
- c# - 如果为接口命名,MVC DisplayTemplate 不呈现