Python/API中位运算符的any()和all()类似物

Python/API中位运算符的any()和all()类似物,python,pandas,numpy,bitwise-operators,Python,Pandas,Numpy,Bitwise Operators,我有一个包含“Category”和“Total”列的熊猫数据框架。可以有4个不同的类别:A、B、C、D。我被指定为每个类别的切点值。我需要排除总数超过相应切点的所有条目。这很好: cat = weekly_units['Category'] total = weekly_units['Total'] weekly_units = weekly_units[(cat == 'A') & (total <= cutpoints['A'])

我有一个包含“Category”和“Total”列的熊猫数据框架。可以有4个不同的类别:A、B、C、D。我被指定为每个类别的切点值。我需要排除总数超过相应切点的所有条目。这很好:

cat = weekly_units['Category']
total = weekly_units['Total']
weekly_units = weekly_units[(cat == 'A') & (total <= cutpoints['A'])
                          | (cat == 'B') & (total <= cutpoints['B'])
                          | (cat == 'C') & (total <= cutpoints['C'])
                          | (cat == 'D') & (total <= cutpoints['D'])]
cat=每周单位['Category']
总计=每周单位['total']

每周单位=每周单位[(cat='A')&(总计Yes)。您正在寻找的是:


conditions=[(cat==k)&(total假设您的
Category
列实际上是
categorialdType
,您还可以执行以下操作:

weekly_units[total <= cat.cat.rename_categories(cutpoints).astype(float)]

weekly_units[total

matched = False  # or matched = pd.Series(False, index=weekly_units.index)
for cat, cutpoint in cutpoints.items()
    matched |= ((weekly_units['Category'] == cat) & (weekly_units['Total'] <= cutpoint))
weekly_units = weekly_units[matched]

我喜欢不使用reduce和编写
每周单位['Category']
每周单位['Total']
明确,所以我接受你的答案。因为在原始代码中,我需要
匹配
与其他条件相结合,所以我将编写单独的内部函数来计算
匹配
使用
运算符与
numpy.logical\u或
?@SashaTsukanov,你比我快吗在括号中!我认为它们是每个(in)相等测试所必需的,但不是整个表达式所必需的。要回答您关于
\uuuu或
的问题,Python将
运算符转换为对
pd.Series.\uu或
的调用,其中的代码调用
运算符。或(与
运算符相同。\uuuuu或\uuuuu
)使用NDAREX用于这两个系列。<代码>运算符。Or> <代码>在NDAREX上使用Python < Cord> >代码> >运算符,将它们传递给<代码> NP.NDAREX.Y.O.Org> 。我不确定代码“> NP.NDARRA.O.O.O.O.<代码>与<代码> NP.LogiLogi或有关,但它们应该做大致相同的事情。我启动了没有PAR的脚本。我还有一个问题。首先你把
匹配的
赋值给
,然后它变成一个面具状的序列,每个
周单位
行包含一个布尔值。这是因为numpy广播吗?@SashaTsukanov最初的
是t与标量和向量/序列之间的大多数numpy或pandas操作类似,标量会自动用于序列的所有元素。我同意代码将
匹配的
从标量提升到序列有点不一致。另一方面,这避免了在第一次循环中必须添加特殊代码(某些
reduce()
自动处理)。另一种方法是使用
matched=pd.Series(False,index=weekly\u units.index)初始化
。仍在考虑
reduce
在这里的使用是否值得。GvR告诉我们在几乎任何情况下都要避免
reduce
,但在这种情况下,我想这并不是很糟糕。@SashaTsukanov。小心,这不是Python。这是。因此,我不知道GvR对特定
numpy
函数的看法。是的,我注意到了di无所谓。我也不知道。@SashaTsukanov,在我看来,如果你使用的是
pandas
,你应该完全开放地使用
numpy
函数,如果它们有用的话,因为
pandas
在内部依赖于
numpy
。听起来很合理。在我尝试将其应用到我的原始代码后,结果是最简单的不要和别人的答案比较
weekly_units[total <= cat.cat.rename_categories(cutpoints).astype(float)]
matched = False  # or matched = pd.Series(False, index=weekly_units.index)
for cat, cutpoint in cutpoints.items()
    matched |= ((weekly_units['Category'] == cat) & (weekly_units['Total'] <= cutpoint))
weekly_units = weekly_units[matched]
import functools, operator
matched = functools.reduce(
    operator.__or__,  # or lambda x, y: x | y
    (
        (weekly_units['Category'] == cat) & (weekly_units['Total'] <= cut)
        for cat, cut in cutpoints.items()
    )
)
weekly_units = weekly_units[matched]