Подсчитайте количество столбцов над датой

#python #pandas

Вопрос:

У меня есть фрейм данных pandas с несколькими столбцами, и я хотел бы знать количество столбцов выше даты 2016-12-31 . Вот пример:

ID Билл Дата 1 Дата 2 Дата 3 Дата 4 Счет 2
4 6 2000-10-04 2000-11-05 1999-12-05 2001-05-04 8
6 8 2016-05-03 2017-08-09 2018-07-14 2015-09-12 17
12 14 2016-11-16 2017-05-04 2017-07-04 2018-07-04 35

И я хотел бы получить эту колонку

Рассчитывать
0
2
3

Комментарии:

1. Посмотрите, не требуется ли вам каких-либо дополнительных разъяснений из приведенных ниже ответов. Если больше вопросов нет, сообщите нам любой из ответов, наиболее подходящих для ваших нужд, приняв выбранный вами ответ. Спасибо!

Ответ №1:

Просто создайте маску и вызовите sum axis=1

 date = pd.to_datetime('2016-12-31')
(df[['Date 1','Date 2','Date 3','Date 4']]>date).sum(1)
 

выход:

 0    0
1    2
2    3
dtype: int64
 

При необходимости вызовите .to_frame('count') команду для создания имени данных со столбцом как count

 (df[['Date 1','Date 2','Date 3','Date 4']]>date).sum(1).to_frame('Count')
   Count
0      0
1      2
2      3
 

Ответ №2:

Используется df.filter для фильтрации Date* столбцов .sum(axis=1)

 (df.filter(like='Date') > '2016-12-31').sum(axis=1).to_frame(name='Count')
 

Результат:

    Count
0      0
1      2
2      3

 

Ответ №3:

Вы можете сделать:

 df['Count'] = (df.loc[:, [x for x in df.columns if 'Date' in x]] > '2016-12-31').sum(axis=1)
 

Выход:

      ID   Bill      Date 1      Date 2      Date 3      Date 4   Bill 2  Count
0     4      6  2000-10-04  2000-11-05  1999-12-05  2001-05-04        8      0
1     6      8  2016-05-03  2017-08-09  2018-07-14  2015-09-12       17      2
2    12     14  2016-11-16  2017-05-04  2017-07-04  2018-07-04       35      3
 

Мы выбираем столбцы с «Датой» в названии. Лучше, когда у нас много таких колонок, и мы не хотим помещать их одну за другой. Затем мы сравниваем его с датой поиска и суммируем «Истинные» значения.