我试图根据多个条件从df中提取行,在选择任何行之前必须满足所有条件。
我的df
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
我的条件必须采用以下格式:
conditions = {'is_net': 'True',
'is_pct': 'True',
'is_mean': 'False',
'is_wgted': 'True',
'is_sum': 'False'}
预期产出:
is_net is_pct is_mean is_wgted is_sum
d True True False True False
答案 0 :(得分:6)
我认为诀窍是将conditions
变为系列:
>>> pd.Series(conditions)
is_mean False
is_net True
is_pct True
is_sum False
is_wgted True
dtype: object
>>> (df == pd.Series(conditions))
is_mean is_net is_pct is_sum is_wgted
a True True True True False
b False True True True False
c True True True False False
d True True True True True
>>> (df == pd.Series(conditions)).all(axis=1)
a False
b False
c False
d True
dtype: bool
>>> df[(df == pd.Series(conditions)).all(axis=1)]
is_net is_pct is_mean is_wgted is_sum
d True True False True False