Как изменить функцию в соответствии со значением в определенном столбце - PullRequest
1 голос
/ 19 мая 2019

Допустим, у меня есть таблица с двумя столбцами:

  1. месяц
  2. Значение

Теперь я хочу создать 3-й столбец, который будет агрегировать это значение для каждого месяца (и будет отображать общий продукт за каждый месяц в каждой строке, которая является частью этого месяца. Любая общая функция, которая могла бы сделать это без меня, чтобы указать каждый случай в функции? (Если бы я использовал функцию «Если», это то, что я бы сделал ..)

Пример: Мои первые 2 столбца - «Месяц» и «Значение», и я хочу функцию, которая создаст столбец «Сумма».

Month  Value     Sum
6      23        57
6      34        57
7      56        100
7      44        100
8      12        12

1 Ответ

0 голосов
/ 21 мая 2019

Общая процедура

Общая процедура заключается в использовании sum с group by 'Month'. Это вернет таблицу, в которой Месяц используется в качестве индекса (без повторных месяцев), и у вас есть столбец с суммами всех месяцев.

Используя в своем примере, вы получите следующую промежуточную таблицу:

Month  Sum
6      57
7      100
8      12

Затем вы можете использовать эту таблицу для создания столбца Sum в исходной таблице.
По сути, вы просто копируете значение в Sum из промежуточной таблицы во всех строках с одинаковыми Month .

Теперь, как это сделать, зависит от используемой вами технологии, которую вы не указали, поэтому я приведу пару примеров с помощью известных мне инструментов: если вы используете разные инструменты, попробуйте адаптировать идею.

Использование python-панд

Предположим, что df - это ваша исходная таблица (без столбца Sum ), созданная с помощью pandas. Тогда процедура будет:

#create the intermediate table using sum and groupby
idf = df.groupby('Month').sum()

#edit idf so that the number of rows is the same of df
idf = idf.loc[df['Month']].reset_index()

#adding the column to the original table
df['Sum'] = idf['Value']

Использование MySQL

Предположим, что otable - это ваша исходная таблица (без столбца Sum) в базе данных MySQL. Тогда процедура будет:

#create additional column to store the Sum, null by default 
ALTER TABLE otable ADD COLUMN Sum INT;

#create the intermediate table using sum and groupby
CREATE TEMPORARY TABLE idf SELECT SUM(Value) FROM otable GROUP BY Month;

#update the original table
UPDATE otable o, idf i SET o.Sum = i.`SUM(Value)` WHERE o.Month = i.Month;

Использование Excel

Для Excel уже ответили здесь и здесь .

...