python - 在 python 中返回跨列具有重复对的行

标签 python pandas csv

我有一个如下所示的 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/

相关文章:

python-3.x - 有没有办法计算 Pandas 数据框中不同行数的前瞻性滚动值?

csv - OpenCsv 读取带有转义分隔符的文件

python - BeautifulSoup : get contents of search result tag

python - 如何使用正则表达式在 OPML (XML) 文件中查找带引号的属性值

python - pandas Dataframe分配问题

python - 你如何只从 python 日期时间中提取日期?

csv - 如何让Powershell从单个CSV单元读取多个值?

python CSV writer - 格式化

python - 在 Redis 上为 Django 和 Express.js 应用程序共享 session 存储

python - Django 如何在 i18n_patterns 中设置默认语言?