Pandas 在数据帧的列中查找与另一列中的两个值对应的值

Pandas 在数据帧的列中查找与另一列中的两个值对应的值,pandas,Pandas,考虑以下几点 d=pd.DataFrame([[1,'a'],[1,'b'],[2,'c'],[2,'a'],[3,'c'],[4,'a'],[4,'c']],columns=['A','B']) 我想在列A中找到对应于列B{2,4}中的'A'和'c'的值。因此,我编写了以下查询 d[d.A.isin(set(d[d.B=='c'].A)) & d.B=='a'].A 我的逻辑是 set(d[d.B=='c'].A 返回A中与“c”关联的所有值。它应该返回{2,3,4},并且它确实

考虑以下几点

d=pd.DataFrame([[1,'a'],[1,'b'],[2,'c'],[2,'a'],[3,'c'],[4,'a'],[4,'c']],columns=['A','B'])
我想在列A中找到对应于列B{2,4}中的'A'和'c'的值。因此,我编写了以下查询

d[d.A.isin(set(d[d.B=='c'].A)) & d.B=='a'].A
我的逻辑是

set(d[d.B=='c'].A
返回A中与“c”关联的所有值。它应该返回{2,3,4},并且它确实返回了该值。然后我考虑从{2,3,4}开始的所有行,并且这些行选择在B中与它们相关联的“A”,这样我就得到了具有C’和“与它们相关联的”的所有值。但是我的查询返回一个空集。它应该返回{2,4}。有人能帮忙调试吗?多谢各位

我们可以使用过滤器

我们可以使用过滤器

使用 检查是否存在唯一的值​​在A中,将值“A”与B中的值“c”关联起来:

new_df=d[d.groupby('A')['B'].transform(lambda x: x.eq('a').any()&x.eq('c').any())]
print(new_df)

   A  B
2  2  c
3  2  a
5  4  a
6  4  c
详情:

你想找到什么值​​在A中,B中有“A”和“c”两个同僚。然后,您可以使用groupby'A'根据唯一值对数据帧执行操作​​在A行中:

d.groupby('A')
它允许根据值分组操作​​以一种方式:

现在,对于使用的每个组,我们检查“c”和“a”是否在B列中:

用于检查序列B中的任何值 每组为“c”,或者如果系列B中的任何值为“a”

这里与使用“==”类似

本系列用于执行以下操作:

最终使用 我们访问唯一的值​​数据帧新的_df的

unique_values=new_df['A'].unique()
print(unique_values)
#[2 4]
使用 检查是否存在唯一的值​​在A中,将值“A”与B中的值“c”关联起来:

new_df=d[d.groupby('A')['B'].transform(lambda x: x.eq('a').any()&x.eq('c').any())]
print(new_df)

   A  B
2  2  c
3  2  a
5  4  a
6  4  c
详情:

你想找到什么值​​在A中,B中有“A”和“c”两个同僚。然后,您可以使用groupby'A'根据唯一值对数据帧执行操作​​在A行中:

d.groupby('A')
它允许根据值分组操作​​以一种方式:

现在,对于使用的每个组,我们检查“c”和“a”是否在B列中:

用于检查序列B中的任何值 每组为“c”,或者如果系列B中的任何值为“a”

这里与使用“==”类似

本系列用于执行以下操作:

最终使用 我们访问唯一的值​​数据帧新的_df的

unique_values=new_df['A'].unique()
print(unique_values)
#[2 4]

@user2371765 groupby A,检查B中是否都是A或c,并保留该组x['B']是什么意思?lambda x:pd.系列中x的实际值是多少?@user2371765 groupby A,检查B中是否都是A或c,并保留该组x['B']的含义是什么?lambda x:pd.系列中x的实际值是多少?很抱歉没有解释。解决方案升级。见第节:详情。如果您有任何疑问,请毫不犹豫地询问:d.groupby'A['B']表示从A列生成的每个组都选择了B列。然后x in.变换λx:x.eq'a'。任意&x.eq'c'。任何值都表示值​​每个组的B值。也就是说,每个组的值​​序列B中的所有元素根据以下函数进行转换:lambda x:x.eq'a'。任意&x.eq'c'。我的问题是什么?谢谢,你忘了。d[d.A.isinsetd[d.B=='c'].A&d.B=='A'].A或d[d.A.isinsetd[d.B=='c'].A&d.B.eq'A'].A很抱歉没有解释。解决方案已升级。见第节:详情。如果您有任何疑问,请毫不犹豫地询问:d.groupby'A['B']表示从A列生成的每个组都选择了B列。然后x in.变换λx:x.eq'a'。任意&x.eq'c'。任何值都表示值​​每个组的B值。也就是说,每个组的值​​序列B中的所有元素根据以下函数进行转换:lambda x:x.eq'a'。任意&x.eq'c'。我的问题是什么?谢谢,你忘了。d[d.A.isinsetd[d.B=='c'].A&d.B=='A'].A或d[d.A.isinsetd[d.B=='c'].A&d.B.eq'A'].A是正确的
new_df=d[d.groupby('A')['B'].transform(lambda x: x.eq('a').any()&x.eq('c').any())]
print(new_df)

   A  B
2  2  c
3  2  a
5  4  a
6  4  c
unique_values=new_df['A'].unique()
print(unique_values)
#[2 4]