Суммирование заданных столбцов по строкам в DataFrame - PullRequest
3 голосов
/ 02 апреля 2020

У меня есть DataFrame, определяемый как:

df = pd.DataFrame({
    'id':[1,2,3], 
    'activity':['A1', 'A2', 'A2'], 
    'prep_hours':[None,None,1], 
    'delivery_hours':[10,10,15]})

Я хочу создать столбец total_hours, который является суммой всех столбцов, соответствующих шаблону *_hours

За время Я просто добавляю нужные столбцы в новый столбец:

df.fillna(0, inplace=True)
df['total_hours'] = df['prep_hours'] + df['delivery_hours']

Но он не легко масштабируется. Например, у меня есть только 2 столбца с именем *_hours, но в реальном DataFrame он содержит более 30 столбцов, которые необходимо добавить.

Есть ли более разумный способ сделать это?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2020

Используйте DataFrame.filter с параметром like и sum, преобразовывать пропущенные значения в 0 необязательно:

df["total_hours"] = df.filter(like='_hours').sum(axis=1)
print (df)
   id activity  prep_hours  delivery_hours  total_hours
0   1       A1         NaN              10         10.0
1   2       A2         NaN              10         10.0
2   3       A2         1.0              15         16.0
1 голос
/ 02 апреля 2020

Вы можете выбрать подмножество вашего исходного фрейма данных, используя list_comprehension, и добавить содержимое по горизонтали, например так:

columns = [col for col in df.columns if "_hours" in col]
df["total_hours"] = df[columns].sum(axis=1)

Если шаблон, который вы ищете, более сложный, вы также можете использовать сопоставление с регулярным выражением :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...