Есть ли способ добавить несколько столбцов pandas условно на основе текста в метке столбца?

#python #pandas

#python #pandas

Вопрос:

Я создаю фрейм данных, который показывает доступность в отеле. Строки — это даты, а столбцы — типы комнат. Есть 5 столбцов, помеченных PD1_Total, PD2_Total, PDSK_Total, PDEK_Total и PDSU_Total.

Мне нужно создать столбец, в котором отображаются все данные о наличии отдельных номеров, добавленные вместе. Очевидный ручной способ сделать это — с помощью кода:

ga['Total_Rooms'] = ga['PD1_Total'] ga['PD2_Total'] ga['PDSK_Total'] ga['PDEK_Total'] ga['PDSU_Total']

Однако исходные данные могут быть обновлены позднее, чтобы включить другие типы номеров с суффиксом «_Total», поэтому я хотел бы найти способ создать эту формулу, чтобы автоматически включать все столбцы с этим суффиксом без необходимости обновлять формулу вручную.

введите описание изображения здесь

Спасибо

Ответ №1:

Простое понимание списка для выбора столбца может помочь:

 ga['Total_Rooms'] = ga[[col for col in ga.columns if col.endswith('_Total')]].sum(axis = 1)
  

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

1. Спасибо, Хамза. Я отметил этот ответ как наиболее полезный, потому что я лучше понимаю понимание списков, чем регулярных выражений. Но они оба работают. Очень признателен.

2. ga.loc[:,ga.columns.str.endswith('_Total')] гораздо более читабелен.

3. Привет, Куанг Хоанг! На самом деле это выдает ошибку для меня, поскольку возвращает список bools вместо фактических имен столбцов

Ответ №2:

Вы можете попробовать так:

 df['Total_Rooms'] = df.filter(regex='_Total$').sum(axis=1)
  

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

1. Спасибо Wasif. Это элегантное решение, которое также работает, но я еще мало что узнал о регулярных выражениях, так что это что-то новое для изучения. Очень признателен.