Я пытаюсь найти очень хороший, исчерпывающий ответ на поставленный выше вопрос.
Давайте возьмем следующий фрейм данных:
df = pd.DataFrame(np.random.randn(4,4), columns=['A', 'B', 'C', 'D'])
df['Category'] = pd.Series(['Cat1', 'Cat2', 'Cat1', 'Cat2'])
df:
A B C D Category
0 0.057456 0.462712 -1.245539 0.095947 Cat1
1 0.741688 0.353600 1.130754 -1.692440 Cat2
2 0.638623 -0.109566 0.118509 -0.692661 Cat1
3 -0.905806 0.284818 -0.094696 -1.325617 Cat2
Я понимаю базовую номенклатуру использования df.A
или df['A']
для выбора столбца A
и df[['A', 'B']]
для выбора обоих столбцов A
и B
.
И если я хочу перейти в логические условия, я могу сделать что-то вроде df[df.A > 0]
чтобы вернуть строки, где df.A
больше 0. И я могу включить несколько условий, таких как df[(df.A > 0) & (df.Category == 'Cat1')]
, чтобы включить несколько условий.
Однако я не вижу, как я могу выбрать подмножествостолбцы данных с теми же двумя логическими условиями, которые использовались выше.
Два подхода, которые я испробовал без успеха:
df['B'].where(df.A > 0)
Возвращает все строки в индексе, тогда как я хотел бы только те, которые возвращают True
для указанного условия.
Я также безуспешно пытался использовать query
, потому что его нельзя использовать в серии.
Итак, df['A'].query(some condition)
возвращает сообщение об ошибке.
В идеале решение, которое я ищу, имеет следующие условия:
- Может использоваться как на одном столбце, так и на нескольких столбцах.То есть, вы можете выбрать как
df['A']
, так и df['B']
. - При желании можно использовать несколько логических условий, а не только одно.
- Возвращает только те строки, которые оцениваются как
True
для условия, а не для всех строк. - В идеале это синтаксически просто, но если это невозможно, пусть будет так.
Спасибо.