3

我希望根据行中的值在 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 
4

2 回答 2

0

您可以使用pandas.rolling_sum对 3 个最后的值求和,并将shift(n)列移动 n 次(在您的情况下为 1)。

如果我们假设您有一列“销售额”,其中包含每周的销售额,代码将是:

df["Last3WeekSales"] = df.groupby("A")["sales"].apply(lambda x: pd.rolling_sum(x.shoft(1),3))
于 2018-05-22T15:11:11.717 回答
0

使用groupby,shiftrolling:

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
于 2018-05-22T15:05:53.380 回答