Pandas 使用“系列”从中选择行

Pandas 使用“系列”从中选择行,pandas,boolean,selection,series,multiple-conditions,Pandas,Boolean,Selection,Series,Multiple Conditions,从这条线索继续: 我想根据存储在Series对象中的多个条件提取给定的行 columns = ['is_net', 'is_pct', 'is_mean', 'is_wgted', 'is_sum'] index = ['a','b','c','d'] data = [['True','True','False','False', 'False'], ['True','True','True','False', 'False'], ['True','True','Fa

从这条线索继续:

我想根据存储在Series对象中的多个条件提取给定的行

columns = ['is_net', 'is_pct', 'is_mean', 'is_wgted', 'is_sum']
index = ['a','b','c','d']
data = [['True','True','False','False', 'False'],
       ['True','True','True','False', 'False'],
       ['True','True','False','False', 'True'],
       ['True','True','False','True', 'False']]

df = pd.DataFrame(columns=columns, index=index, data=data)
df

    is_net  is_pct  is_mean is_wgted    is_sum
a   True    True    False   False   False
b   True    True    True    False   False
c   True    True    False   False   True
d   True    True    False   True    False
我的情况:

d={'is_net': 'True', 'is_sum': 'True'}
s=pd.Series(d)
预期产出:

    is_net  is_pct  is_mean is_wgted    is_sum
c   True    True    False   False   True
我失败的尝试:

(df == s).all(axis=1)


a    False
b    False
c    False
d    False
dtype: bool
不确定在满足这两个条件时为什么“c”为假

注意,我可以达到这样的预期结果,但我更愿意使用串联方法

df[(df['is_net']=='True') & (df['is_sum']=='True')]

由于您只有2个条件,我们可以使用这些条件并过滤df:

In [55]:
df[(df == s).sum(axis=1) == 2]
​
Out[55]:
  is_net is_pct is_mean is_wgted is_sum
c   True   True   False    False   True
这是因为布尔值转换为
1
0
表示
True
False

In [56]:
(df == s).sum(axis=1)
​
Out[56]:
a    1
b    1
c    2
d    1
dtype: int64

您可以通过为列添加子集来稍微修改您的解决方案:

In [219]: df[(df == s)[['is_net', 'is_sum']].all(axis=1)]
Out[219]:
  is_net is_pct is_mean is_wgted is_sum
c   True   True   False    False   True
或:


如果len(df.columns)多于2个但少于2个,这会起作用吗?对不起,你能更好地解释一下你的意思吗?如果你有更多的条件,但总条件少于列数?如果是,这不一样吗?对不起,是的,有两个以上的条件。那太好了,我会试试。如果你有更多的条件,但是你想要任何一行至少匹配2个条件,那么这仍然可以通过更改为
=2
来实现,这太棒了!谢谢谢谢你的努力!
In [219]: df[(df == s)[s.index].all(axis=1)]
Out[219]:
  is_net is_pct is_mean is_wgted is_sum
c   True   True   False    False   True