如何在pandas中根据一列的指定值选择共享另一列值的行?

0 投票
2 回答
42 浏览
提问于 2025-04-14 16:37

实际上,我有一个数据集,里面有5281行和大约40列的数据。从中我需要选出一些特定的值,这些值在另一行中是重复的。

为了简化,我尝试把数据整理成一个只有两列的表格,分别叫做A和B。

d = {'A': [2, 1, 2, 2, 1, 1, 3, 1, 1, 2], 'B':['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e']}
df = pd.DataFrame(d)

在图片中,你可以看到这个表格,我标记了我想要的部分:我想要一组A的值是(1, 2),并且它们在B列中有相同的值。

这里是图片描述

再给你一点背景信息:我需要删除那些在某一列(这里是B列)中有重复值的行,但只有当这些重复值在另一列(这里是A列)中有特定的值(比如1和2)时。我希望能直接在这个表格上进行这些操作。

2 个回答

0

当然可以!请看下面的内容:

这段代码的意思是,它会检查一个条件,如果这个条件成立,就会执行某些操作。简单来说,就是在某个情况下做某件事。

如果你想让程序在特定条件下运行,比如说用户输入了正确的密码,程序就会允许他们进入。这种检查就像是一个门卫,只有在你给出正确的密码时,门卫才会让你进来。

在代码中,通常会用一些符号来表示这些条件,比如“==”表示相等,“!=”表示不相等等等。这些符号就像是程序的语言,让它知道什么时候该做什么。

希望这个解释能帮助你理解这段代码的基本意思!如果还有其他问题,随时问我哦!

# if the values in A you're interested in
values_of_interest = {1, 2}

# Identify rows with duplicates in 'B' that correspond to the set of interest in 'A'
mask = df.duplicated('B', keep=False) & df['A'].isin(values_of_interest)

# To select these rows
selected_rows = df.loc[mask]

print(selected_rows)
2

试试这个方法:

在这个解决方案中,groupby() 会返回一个序列,其中 A 的值作为 集合,B 的值作为索引。接着,我们检查每个集合是否等于目标集合。最后,我们将布尔值序列映射回原来的行数,这样就可以选择我们需要的行。

s = {1,2}
df.loc[df['B'].map(df.groupby('B')['A'].agg(set).eq(s))]

输出:

   A  B
0  2  a
1  1  a

撰写回答