Условная сумма из строк в новый столбец в пандах - PullRequest
0 голосов
/ 22 мая 2018

Я хочу создать новый столбец в panda на основе значения в строке.Мои примеры данных:

df=pd.DataFrame({"A":['a','a','a','a','a','a','b','b','b'],
         "Sales":[2,3,7,1,4,3,5,6,9,10,11,8,7,13,14],
         "Week":[1,2,3,4,5,11,1,2,3,4])

Я хочу новый столбец «Last3WeekSales», соответствующий каждой неделе, с суммой продаж за предыдущие 3 недели.

ПРИМЕЧАНИЕ. Shift () не будет работать, поскольку данные за несколько недель отсутствуют.

Логика, о которой я подумал: Проверка недели нет.в каждой строке, затем суммируя данные из w-1, w-2, w-3.

Требуется вывод:

   A    Week  Last3WeekSales
0  a      1       0
1  a      2       2 
2  a      3       5
3  a      4       12 
4  a      5       11
5  a     11       0
6  b      1       0
7  b      2       5
8  b      3       11
9  b      4       20 

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

вы можете использовать pandas.rolling_sum для суммирования по 3 последним значениям и shift(n) для смещения вашего столбца в n раз (1 в вашем случае).

, если мы предполагаем, что столбец «продажи» спродажи каждой недели, код будет:

df["Last3WeekSales"] = df.groupby("A")["sales"].apply(lambda x: pd.rolling_sum(x.shoft(1),3))
0 голосов
/ 22 мая 2018

Использование groupby, shift и rolling:

df['Last3WeekSales'] = df.groupby('A')['Sales']\
                         .apply(lambda x: x.shift(1)
                                           .rolling(3, min_periods=1)
                                           .sum())\
                         .fillna(0)

Выход:

   A  Sales  Week  Last3WeekSales
0  a      2     1             0.0
1  a      3     2             2.0
2  a      7     3             5.0
3  a      1     4            12.0
4  a      4     5            11.0
5  a      3     6            12.0
6  b      5     1             0.0
7  b      6     2             5.0
8  b      9     3            11.0
...