我想通过指定一个变量一组column==value
条件来过滤pandasDataFrame
的行。在
假设我们有一个像这样的玩具:
from itertools import product
from numpy.random import rand
df = pd.DataFrame([[i,j,k,rand()] for i,j,k,m in product(range(2), repeat=3)],
columns=['par1','par2','par3','val'])
其中一些行看起来像:
^{pr2}$我想知道通过指定一些行来选择某些行的最佳方法是什么
column==value
不需要包含所有列,也不需要总是相同的列甚至相同的列数的条件。我认为dict
是一种相当自然的指定条件的方法:
conditions = {'par1':1, 'par3':0}
在这种情况下,df.par2
的任何值都可以。在
df.isin()
我知道df.isin()
与dict
参数以及all(1)
as shown in the docs(该节的最后一段代码)。问题是,在df.isin()
调用中未通过条件的列中的值给出False
,因此对all(1)
的后续调用给出了一个空的数据帧。(一种解决方法是用所有可能的值来添加所有缺少的列,但这听起来不是一个好的解决方案)
df.query()
在写问题的时候,我想出了另一个办法。这个看起来更好:从条件dict
自动构建查询。在
df.query(' & '.join(['({} == {})'.format(k,v)
for k,v in conditions.iteritems()]))
它按预期工作。。。在
par1 par2 par3 val
4 1 0 0 0.035160
6 1 1 0 0.172746
不过,我还不完全相信,我想知道有没有更自然/恰当/清晰的方法来做这件事。。。我对熊猫的印象总是很好。。。:P
您可以制作一系列
conditions
,然后只选择这些列:这是因为在我们制作了系列之后,它比较了我们需要它的方式:
^{pr2}$相关问题 更多 >
编程相关推荐