[問題] dataframe卡關

作者: yimean (溫柔殺手)   2020-01-28 23:09:18
各位版上的大大晚上好,我正在寫一個資料分析,目前卡關了。
請高手指導一下,感恩。
我的原始資料如下
品名 出貨數量 出貨日期
165 667 7000 2019-01-04
169 667 5000 2019-03-20
167 667 6000 2019-06-05
168 667 6000 2019-06-05
164 667 9000 2019-10-02
170 667 3500 2019-10-02
166 667 7000 2019-12-03
其中165,169,167.....,166是原本的資料序號
也就是說,這個資料是我已經經過處理的資料。
我想要做的事情是把每個月分的資料作統計預,計資料應該是長成下方兩種其中一種
Type1:
出貨數量 出貨月份
7000 01
5000 03
12000 06
12500 10
7000 12
Type2:
M=[01,03,06,10,12]
V=[7000,5000,12000,12500,700]
我有試過for loop加上if判斷,但是最後都卡在index的問題解決不了。
這個用SQL幾行就解決了。
不過最近在學習Pandas的Dataframe操作所以就想拿來做做看。
結果~~卡關~~~真的是有點丟臉,但是問題還是要解決,不然我時間就白花了。
懇請高手指點一下,感恩。
作者: poototo (poototo)   2020-01-28 23:55:00
df=df.set_index(["出貨日期"])以時間序列做index,然後設取樣頻率resample,asfreq...相關用法及參數下得好,比SQL更簡單或者新增一個月份欄位來groupbydf['月']=df['出貨日期'].map(lambda x:x[5:7])
作者: TitanEric (泰坦)   2020-01-29 00:47:00
把出貨日期轉datetime再groupby月份感覺比較好
作者: OrzOGC (洞八達人.拖哨天王)   2020-01-29 02:02:00
有時上一下stackoverflow就會晃然大悟:N小時前的我是在蠢什麼的...這麼簡單的東西搞老半天
作者: yimean (溫柔殺手)   2020-01-29 10:42:00
感謝p大, T大跟O大 我已經成功取得月分了,但是我畫不了圖
作者: TitanEric (泰坦)   2020-01-29 11:44:00
group by後好像變成series不是dataframe 所以不太能用index方式取值可以試試plt(V.index, V.values)
作者: yimean (溫柔殺手)   2020-01-29 12:03:00
@T大感謝回應,還是不行,我把V.index跟V.values印出來我最終找到這個解法S=V.unstack()plt.bar(V.index, S.values) 但是我不知道為什麼。
作者: karco (karco)   2020-01-29 12:21:00
因為shape不同啊一個是(5,)一個是(5,1)所以他說mismatch因此做unstack後兩個shape都是(5,)就能畫了
作者: yimean (溫柔殺手)   2020-01-29 14:40:00
@k大,原來如此,感謝指導。這一路走來真是漫長呢哈哈。
作者: poototo (poototo)   2020-01-29 20:49:00
用jupyter看顯示出的樣子久了,可以看出V是Seriesseries.to_frame().plot.bar() 轉成df再畫也OK你就不用拆x跟y,也可以同年份多欄位的bar一次畫出來

Links booklink

Contact Us: admin [ a t ] ucptt.com