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