Как подсчитать строки во фрейме данных, которые удовлетворяют нескольким условиям?

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных (назовем его df), который выглядит примерно так.

 Offer | Country | Type | Cancelled
------|---------|------|----------
111   | UK      | A    | N
222   | UK      | A    | Y
333   | UK      | B    | N
444   | UK      | C    | N
555   | UK      | D    | N
666   | UK      | E    | N 
777   | ROI     | A    | N

 
 

Я хочу, чтобы переменная содержала количество всех предложений в Великобритании, которые относятся к типам A, B или C и которые не были отменены. Таким образом, с приведенными выше данными переменная будет установлена на 3 (т. е. предлагает 111, 333 и 444). Кто-нибудь знает, как это сделать, пожалуйста?

Ответ №1:

Попробуй:

 x = df.loc[
    df.Country.eq("UK") amp; df.Type.isin(["A", "B", "C"]) amp; df.Cancelled.eq("N")
]
print(len(x))
 

С принтами:

 3
 

Шаг за шагом:

  1. Создайте маску:
 mask = (
    df.Country.eq("UK") amp; df.Type.isin(["A", "B", "C"]) amp; 
df.Cancelled.eq("N")
)


0     True
1    False
2     True
3     True
4    False
5    False
dtype: bool
 
  1. Использовать .loc с mask :
 x = df.loc[mask]


   Offer Country Type Cancelled
0    111      UK    A         N
2    333      UK    B         N
3    444      UK    C         N
 
  1. Воспользуйся len() :
 print(len(x))
 

Или: суммируйте маску:

 print(mask.sum())
 

С принтами:

 3
 

Ответ №2:

В одной строке:

 my_count =len(df[(df.Country=='UK') amp;amp; (df.Type in ['A','B','C']) amp;amp; (df.Cancelled=='N')])