Как суммировать предыдущий столбец pandas df с текущим, если он содержит слово «дополнительный»

#python #pandas

#питон #панды

Вопрос:

У меня есть df pandas, в котором есть столбцы, которые необходимо суммировать с предыдущим столбцом, если они содержат слово «дополнительно». Например, вот мои панды df:

 id laptops laptops extra battery cables monitor monitor extra 0 54 18 108 54 28 12  1 33 9 48 20 10 4 2 82 61 98 67 21 9 ...  

Есть ли в панд способ найти столбцы, содержащие слово extra, и суммировать их с предыдущим столбцом? Это помогло бы очистить так много данных.

Спасибо

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

1. Не могли бы вы, пожалуйста, предоставить нам код, который вы сделали до сих пор?

2. Ответ был отредактирован.

Ответ №1:

Удалите extra текст и агрегируйте sum для всех столбцов:

 df1 = (df.rename(columns=lambda x: x.replace(' extra', ''))  .groupby(level=0, axis=1, sort=False)  .sum())  

Или фильтруйте extra столбцы, удаляйте extra и добавляйте в исходные столбцы, последние удаляйте extra столбцы:

 m = df.columns.str.endswith('extra')  df1 = (df.add(df.loc[:, m]  .rename(columns=lambda x: x.replace(' extra', '')), axis=1, fill_value=0)  .loc[:, ~m])  

ИЗМЕНИТЬ: Для добавления предыдущего столбца по extra подстроке в конце имен столбцов используйте:

 m = df.columns.to_series().str.endswith('extra')  df.loc[:, m] = df.loc[:, m.shift(-1, fill_value=False)]   df.loc[:, m].to_numpy() df = df.loc[:, ~m] print (df)  id laptops battery cables monitor 0 0.0 54.0 108.0 54.0 28.0 1 1.0 33.0 48.0 20.0 10.0 2 2.0 82.0 98.0 67.0 21.0