我有一个如下所示的 csv 文件:
visitor guest location year
person1 person2 memphis 1994
person1 person4 detroit 2008
person2 person1 oakland 2006
person4 person1 chicago 1993
person3 person1 oakland 1998
person5 person6 detroit 2001
我正在尝试编写一个遍历 csv 的 python 程序,如果有一个访客 + 访客与访客 + 访客匹配,它将返回整行,如下所示...
visitor guest location year
person1 person2 memphis 1994
person1 person4 detroit 2008
person2 person1 oakland 2006
person4 person1 chicago 1993
我是Python新手。到目前为止我得到的是:
import pandas as pd
df = pd.read_csv(“visitors.csv")
df2= df[df.duplicated([‘visitor’, ‘guest’], keep=False)]
但这只是在“访客”+“访客”重复时给我返回列表,而不是在“访客”+“访客”与“访客”+“访客”相同时返回列表。
我想做的似乎是这个的变体: return rows with unique pairs across columns
但是这段代码:
df2 = df.loc[:, [‘visitor’, ‘guest’]].apply(sorted, axis=1).drop_duplicates()
正在删除重复项(只给我“访客”和“访客”列),而不是保留它们。
最佳答案
您可以像这样构建 bool 掩码:
mask = df[['visitor', 'guest']].apply(sorted, axis=1).duplicated(keep=False)
然后对其建立索引:
df2 = df.loc[mask]
这里,mask
是一系列 bool 值,只要前两列(与顺序无关)在其他地方重复,它就为 True:
0 True
1 True
2 True
3 True
4 False
5 False
dtype: bool
并且可以有效地传递给.loc[]
,作为“过滤”真实情况的一种手段。
关于python - 在 python 中返回跨列具有重复对的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48736997/