Я использую pandas
, чтобы попытаться получить счет для членов, которые приобрели конкретный тип контракта между двумя датами. Dataframe, что я работаю с НАПОМИНАЕТ:Pandas Фильтрация по дате И ИЛИ Условие
Member Nbr Contract-Type Date-Joined
20 1 Year Membership 2011-08-01
3128 3 Month Membership 2011-07-22
3535 4 Month Membership 2015-02-18
3760 4 Month Membership 2010-02-28
3762 3 Month Membership 2010-01-31
3882 1 Month Membership 2010-04-24
3892 3 Month Membership 2010-03-24
4116 3 Month Membership 2014-12-02
4700 1 Month Membership 2014-11-11
4802 4 Month Membership 2014-07-26
5004 1 Year Membership 2012-03-12
5020 1 Year Membership 2010-07-28
5022 3 Month Membership 2010-06-25
5130 1 Year Membership 2011-01-04
...
Я могу получить количество, если есть только один тип контракта, что я заинтересован в использовании
print(len(df[(df['Date-Joined'] > '2010-01-01')
& (df['Date-Joined'] < '2012-02-01')
& (df['Member Type'] == '1 Year Membership')]))
Когда я пытаюсь что-то подобное указав 1 Year Membership
или 4 Month Membership
со следующим кодом
print(len(df[(df['Date-Joined'] > '2013-01-01')
& (df['Date-Joined'] < '2013-02-01')
& (df['Member Type'] == '1 Year Membership')
or (df['Member Type'] == '4 Month Membership')]))
Я получаю следующую ошибку
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
и заменить условие or
посредством &
состояния возвращает 0
Используйте '|' вместо 'or'. –
Кроме того, '&' имеет приоритет над '' ', поэтому вашей логике, вероятно, понадобится еще один набор скобок. –