Это СУХОЙ, простой и явный:
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]
Обратите внимание, что это следует за официальным советом"Использовать functools.reduce (), если вам это действительно нужно; однако 99в процентах случаев явный цикл for более читабелен. "
Существует также стандартный подход с использованием reduce()
, но, как и было обещано, он менее читабелен:
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]