亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于另一列的計算創建一列

基于另一列的計算創建一列

繁花不似錦 2022-10-25 10:59:49
我想根據前一周的銷售額創建另一個列。這是示例輸入:df = pd.DataFrame({'Week':[1,1,2,2,3,3,4,4,5,5,1,1,2,2,3,3,4,4,5,5],                   'Category':['Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White'],                   'id':[1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2],                   'Sales':[100,200,300,400,100,200,300,400,100,200,100,200,300,400,100,200,300,400,100,200],                  'Sales_others':[10,20,30,40,10,20,30,40,10,20,10,20,30,40,10,20,30,40,10,20]})print(df)基于此,我想創建另一個列,它只不過是前一周的銷售額。這是所需輸出的示例    df_output = pd.DataFrame({'Week':[1,1,2,2,3,3,4,4,5,5,1,1,2,2,3,3,4,4,5,5],                       'Category':['Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White','Red','White'],                       'id':[1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2],                       'Sales':[100,200,300,400,100,200,300,400,100,200,100,200,300,400,100,200,300,400,100,200],                      'Sales_others':[10,20,30,40,10,20,30,40,10,20,10,20,30,40,10,20,30,40,10,20],                      'Sales_previous_week':[0,0,100,200,300,400,100,200,300,400,0,0,100,200,300,400,100,200,300,400]})print(df_output)我發現很難創建一個自我加入的東西。前一周應該只受銷售文件的影響,我應該能夠保留“sales_others”列--Edit 添加原始代碼CR_UK_NL_Weeklevel['PREVIOUS_WEEK'] = CR_UK_NL_Weeklevel.groupby(['RETAIL_SITE_ID','CATEGORY_NAME'])['CURRENT_WEEK'].shift(fill_value=0)print(CR_UK_NL_Weeklevel)重命名列CR_UK_NL_Weeklevel.columns.values[4] = 'CURRENT_WEEK'CR_UK_NL_Weeklevel.columns.values[3] = 'LAST_YEAR_WEEK'CR_UK_NL_Weeklevel.columns.values嘗試實施解決方案:CR_UK_NL_Weeklevel['PREVIOUS_WEEK'] = CR_UK_NL_Weeklevel.groupby(['RETAIL_SITE_ID','CATEGORY_NAME'])['CURRENT_WEEK'].shift(fill_value=0)print(CR_UK_NL_Weeklevel)[78]:CR_UK_NL_Weeklevel['PREVIOUS_WEEK'] = CR_UK_NL_Weeklevel.groupby(['RETAIL_SITE_ID','CATEGORY_NAME'])['CURRENT_WEEK'].shift(fill_value=0)print(CR_UK_NL_Weeklevel)
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

如果每周總是有相同的類別并且連續幾周使用按列DataFrameGroupBy.shift分組:Category

df['Sales_PREVIOUS'] = df.groupby('Category')['Sales'].shift(fill_value=0)

print (df)

   Week Category  Sales  Sales_PREVIOUS

0     1      Red    100               0

1     1    White    200               0

2     2      Red    300             100

3     2    White    400             200

4     3      Red    100             300

5     3    White    200             400

6     4      Red    300             100

7     4    White    400             200

8     5      Red    100             300

9     5    White    200             400

旋轉的另一個想法是 use DataFrame.pivot,然后DataFrame.shift使用DataFrame.stackforSeries和 last add new column by DataFrame.join


s = df.pivot('Week','Category','Sales').shift(fill_value=0).stack()

df = df.join(s.rename('Sales_PREVIOUS WEEK'), on=['Week','Category'])

編輯:


使用新數據添加列id:


df['Sales_PREVIOUS'] = df.groupby(['id','Category'])['Sales'].shift(fill_value=0)

對于第二種解決方案:


s = df.set_index(['Week','id','Category'])['Sales'].unstack([1,2]).shift(fill_value=0).unstack()

df = df.join(s.rename('Sales_PREVIOUS WEEK'), on=['id','Category','Week'])

print (df)

    Week Category  id  Sales  Sales_others  Sales_PREVIOUS WEEK

0      1      Red   1    100            10                    0

1      1    White   1    200            20                    0

2      2      Red   1    300            30                  100

3      2    White   1    400            40                  200

4      3      Red   1    100            10                  300

5      3    White   1    200            20                  400

6      4      Red   1    300            30                  100

7      4    White   1    400            40                  200

8      5      Red   1    100            10                  300

9      5    White   1    200            20                  400

10     1      Red   2    100            10                    0

11     1    White   2    200            20                    0

12     2      Red   2    300            30                  100

13     2    White   2    400            40                  200

14     3      Red   2    100            10                  300

15     3    White   2    200            20                  400

16     4      Red   2    300            30                  100

17     4    White   2    400            40                  200

18     5      Red   2    100            10                  300

19     5    White   2    200            20                  400

編輯:


問題在于列名,請使用:


cols = CR_UK_NL_Weeklevel.columns.tolist()

cols[4] = 'CURRENT_WEEK'

cols[3] = 'LAST_YEAR_WEEK'

CR_UK_NL_Weeklevel.columns = cols


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號