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]