Контекст: У меня есть данные в excel, которые мы обрабатываем через Pandas для очистки, а затем в дальнейшем используем их в модели ML.В процессе очистки я пытаюсь отфильтровать данные на основе нескольких столбцов как условие ИЛИ.Этот набор столбцов имеет имя заголовка в качестве даты начала недели, поэтому эти 7 столбцов будут представлять 7 недель.Название заголовка этого столбца меняется каждую неделю.Следовательно, я не могу сохранить непротиворечивый код для автоматического выбора имени заголовка.
Логика, которую я попробовал: Я написал фрагмент кода для печати условия «ИЛИ», используястолбцы с этой датой, после чего я копирую и вставляю этот оператор печати в часть кадров данных.Ниже показано, как это выглядит:
Я копирую вставку столбца на данный момент.Но я предполагаю, что смогу построить логику для идентификации столбца даты, применив условие на основе типа к именам столбцов
Пример данных:
1/20/2019 1/27/2019 2/3/2019 2/10/2019 2/17/2019 2/24/2019 3/3/2019 \
0 0(80CS,8H) 0(80CS) 0(80CS) 0(80CS) 0(80CS) 0(80CS) 0(80CS)
1 0(50CS,8H) 0(50CS) 0(50CS) 0(50CS) 0(50CS) 0(50CS) 0(50CS)
2 0(40CS,8H) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
3 0(40CS,8H) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
4 0(40CS,8H) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
5 0(40CS,8H) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
6 12(25CS,8H) 15(25CS) 15(25CS) 15(25CS) 15(25CS) 15(25CS) 15(25CS)
7 11(28CS,8H) 12(28CS) 12(28CS) 12(28CS) 12(28CS) 12(28CS) 12(28CS)
8 8(30CS,8H) 10(30CS) 10(30CS) 10(30CS) 2(30CS,32T) 10(30CS) 10(30CS)
9 0(40CS,8H) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
3/10/2019 3/17/2019 3/24/2019 3/31/2019 4/7/2019
0 0(80CS) 0(80CS) 0(80CS) 0(80CS) 0(80CS)
1 0(50CS) 0(50CS) 0(50CS) 0(50CS) 0(50CS)
2 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
3 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
4 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
5 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
6 15(25CS) 15(25CS) 15(25CS) 20(20CS) 20(20CS)
7 12(28CS) 12(28CS) 12(28CS) 12(28CS) 12(28CS)
8 10(30CS) 10(30CS) 10(30CS) 10(30CS) 10(30CS)
9 0(40CS) 0(40CS) 0(40CS) 0(40CS) 0(40CS)
avail_col = ['1/20/2019',
'1/27/2019', '2/3/2019', '2/10/2019', '2/17/2019', '2/24/2019',
'3/3/2019', '3/10/2019', '3/17/2019', '3/24/2019', '3/31/2019',
'4/7/2019']
##changing the data type of selected columns
for i in avail_col:
avail_dat[i] = avail_dat[i].astype(str).apply(lambda x: x.split('(')[0])
avail_dat[i] = avail_dat[i].str.replace('-','0')
avail_dat[i] = avail_dat[i].astype(float)
or_str = ''
for i in avail_col:
or_str = "(avail_dat['"+i+"'] >= 24) | "
print(or_str)
Видимо, я могуне передать переменную во фрейм данных для фильтрации, или я пока не знаю, как это сделать, поэтому я скопирую вставленный напечатанный оператор в приведенный ниже код, чтобы отфильтровать фрейм данных
avail_dat = avail_dat[(avail_dat['1/20/2019'] >= 24) |
(avail_dat['1/27/2019'] >= 24) |
(avail_dat['2/3/2019'] >= 24) |
(avail_dat['2/10/2019'] >= 24) |
(avail_dat['2/17/2019'] >= 24) |
(avail_dat['2/24/2019'] >= 24) |
(avail_dat['3/3/2019'] >= 24) |
(avail_dat['3/10/2019'] >= 24) |
(avail_dat['3/17/2019'] >= 24) |
(avail_dat['3/24/2019'] >= 24) |
(avail_dat['3/31/2019'] >= 24) |
(avail_dat['4/7/2019'] >= 24)
]
Есть лиспособ передать переменную вместо копирования каждый раз?