Вставьте список значений в столбцы в зависимости от позиции столбца и значения, а затем повторяйте, пока столбцов не остPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Вставьте список значений в столбцы в зависимости от позиции столбца и значения, а затем повторяйте, пока столбцов не ост

Сообщение Anonymous »

У меня есть диапазон столбцов, имена столбцов которых представляют собой даты, которые увеличиваются на основе сегодняшней даты в течение следующих 30 дней.
В каждый столбец я пытаюсь вставить скользящий список на основе линии команды.
Следующий сценарий дает желаемый результат:

Код: Выделить всё

start_date = date.today()
end_date = start_date + timedelta(days=31)

new_column_names = ['colleague', 'team'] + [(start_date + timedelta(days=i)).strftime('%d/%m/%Y')
for i in range(len(roster.columns) - 2)]

roster.columns = new_column_names

s1 = '04:30-14:00'
s2 = '05:30-15:00'
s3 = '05:30-15:00'
s4 = '13:30-23:00'
s5 = '13:30-23:30'
s6 = 'OFF'
s7 = 'OFF'
s8 = 'OFF'

team1 = [s1, s2, s3, s4, s5, s6, s7, s8]
team2 = [s2, s3, s4, s5, s6, s7, s8, s1]
team3 = [s3, s4, s5, s6, s7, s8, s1, s2]
team4 = [s4, s5, s6, s7, s8, s1, s2, s3]
team5 = [s5, s6, s7, s8, s1, s2, s3, s4]
team6 = [s6, s7, s8, s1, s2, s3, s4, s5]
team7 = [s7, s8, s1, s2, s3, s4, s5, s6]
team8 = [s8, s1, s2, s3, s4, s5, s6, s7]

columns_to_update = ['03/12/2024', '04/12/2024', '05/12/2024', '06/12/2024', '07/12/2024', '08/12/2024', '09/12/2024', '10/12/2024']
row_condition = (roster['team'] == 1)
roster.loc[row_condition, columns_to_update] = team1

roster.head(16)
Как показано на рисунке ниже:
Правильный вывод
Это работает нормально, и я получаю желаемое вывод, если я напрямую ссылаюсь на имена столбцов, но поскольку имена этих столбцов меняются каждый день, я хотел ссылаться на них по индексу, а не по имени, поэтому мне не нужно обновлять строку кода каждый день. Вместо этого я попытался ссылаться на них по индексу, используя iLoc, чтобы мне не приходилось менять переменную каждый день, как показано ниже:

Код: Выделить всё

columns_to_update = roster.iloc[:, 2:10]
row_condition = (roster['team'] == 1)
roster.loc[row_condition, columns_to_update] = team1
но выдает следующую ошибку:

Код: Выделить всё

KeyError: "None of \[Index(\[('0', '3', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('0', '4', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('0', '5', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('0', '6', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('0', '7', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('0', '8', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('0', '9', '/', '1', '2', '/', '2', '0', '2', '4'),\\n ('1', '0', '/', '1', '2', '/', '2', '0', '2', '4')\],\\n dtype='object')\] are in the \[columns\]"
Затем я попытался переместить соглашение об изменении имени позже в сценарии после операции обновления столбцов, но возникла следующая ошибка

Код: Выделить всё

TypeError "'int' object is not iterable"
Если вышеуказанное можно решить, чтобы я мог вставлять на основе индекса столбца, а не имени столбца, я бы хотел, чтобы сценарий был улучшен, чтобы шаблон повторялся до тех пор, пока столбцов не останется.
p>
Итак, окончательный результат выглядит следующим образом:
Окончательный результат

Подробнее здесь: https://stackoverflow.com/questions/792 ... and-then-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»