pandas 数据框查询问题
Issue with pandas query for dataframe
考虑以下因素。
import pandas as pd
d=pd.DataFrame([[1,'a'],[1,'b'],[2,'c'],[2,'a'],[3,'c'],[4,'a'],[4,'c']],columns=['A','B'])
我想要 A 中的那些值与它们完全 'c'('c' 并且只有 'c')相关联。只有一个这样的值。它是 3。我编写了以下查询,但没有返回正确的结果。
d[ d.B.isin(['c']) & ~d.A.isin(d[d.B.isin(set(d.B.unique())-{'c'})].A.to_frame()) ].A.to_frame()
我的想法是找到 A 中所有与 'c' 相关联的值,然后从中删除那些也与 'c' 以外的其他值相关联的值。但是代码 returns 只是与 'c' 关联的值。有人可以帮我弄这个吗?谢谢。
最简单的想法是使用 c
过滤值并且不允许在 A
列中重复:
s1 = d.loc[d.B.eq('c') & ~d.A.duplicated(keep=False), 'A']
print (s1)
4 3
Name: A, dtype: int64
您的解决方案通过删除 .to_frame()
起作用,但更好的方法是通过掩码将 loc
用于 select - evaluation order matters:
s2 = d.loc[ d.B.isin(['c']) & ~d.A.isin(d.loc[d.B.isin(set(d.B.unique())-{'c'}), 'A']), 'A']
print (s2)
4 3
Name: A, dtype: int64
s2 = d[ d.B.isin(['c']) & ~d.A.isin(d[d.B.isin(set(d.B.unique())-{'c'})].A) ].A
print (s2)
4 3
Name: A, dtype: int64
考虑以下因素。
import pandas as pd
d=pd.DataFrame([[1,'a'],[1,'b'],[2,'c'],[2,'a'],[3,'c'],[4,'a'],[4,'c']],columns=['A','B'])
我想要 A 中的那些值与它们完全 'c'('c' 并且只有 'c')相关联。只有一个这样的值。它是 3。我编写了以下查询,但没有返回正确的结果。
d[ d.B.isin(['c']) & ~d.A.isin(d[d.B.isin(set(d.B.unique())-{'c'})].A.to_frame()) ].A.to_frame()
我的想法是找到 A 中所有与 'c' 相关联的值,然后从中删除那些也与 'c' 以外的其他值相关联的值。但是代码 returns 只是与 'c' 关联的值。有人可以帮我弄这个吗?谢谢。
最简单的想法是使用 c
过滤值并且不允许在 A
列中重复:
s1 = d.loc[d.B.eq('c') & ~d.A.duplicated(keep=False), 'A']
print (s1)
4 3
Name: A, dtype: int64
您的解决方案通过删除 .to_frame()
起作用,但更好的方法是通过掩码将 loc
用于 select - evaluation order matters:
s2 = d.loc[ d.B.isin(['c']) & ~d.A.isin(d.loc[d.B.isin(set(d.B.unique())-{'c'}), 'A']), 'A']
print (s2)
4 3
Name: A, dtype: int64
s2 = d[ d.B.isin(['c']) & ~d.A.isin(d[d.B.isin(set(d.B.unique())-{'c'})].A) ].A
print (s2)
4 3
Name: A, dtype: int64