簡體   English   中英

從行到熊貓的新列中的條件總和

[英]Conditional sum from rows into a new column in pandas

我正在根據行中的值在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 

使用groupbyshiftrolling

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

您可以使用pandas.rolling_sum對3個最后的值求和,並使用shift(n)將列移動n次(在您的情況下為1個)。

如果我們假設您的“銷售額”列包含每周的銷售額,則代碼為:

df["Last3WeekSales"] = df.groupby("A")["sales"].apply(lambda x: pd.rolling_sum(x.shoft(1),3))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM