推 poototo: df=df.set_index(["出貨日期"]) 01/28 23:55
→ poototo: 以時間序列做index,然後設取樣頻率 01/28 23:56
推 poototo: resample,asfreq...相關用法及參數下得好,比SQL更簡單 01/29 00:05
推 poototo: 或者新增一個月份欄位來groupby 01/29 00:13
推 poototo: df['月']=df['出貨日期'].map(lambda x:x[5:7]) 01/29 00:34
推 TitanEric: 把出貨日期轉datetime再groupby月份感覺比較好 01/29 00:47
→ OrzOGC: 有時上一下stackoverflow就會晃然大悟:N小時前的我是在 01/29 02:02
→ OrzOGC: 蠢什麼的...這麼簡單的東西搞老半天 01/29 02:02
→ yimean: 感謝p大, T大跟O大 我已經成功取得月分了,但是我畫不了圖 01/29 10:42
ER['月']=ER['出貨日期'].dt.month
V=pd.DataFrame()
V=ER.groupby('月').sum()
V長這樣
月
1 7000
3 5000
6 12000
10 12500
12 7000
Name: 出貨數量, dtype: int64
我有試過plt(V.['月'],V.['出貨數量'])
但是還是錯誤 >.<
ValueError: shape mismatch: objects cannot be broadcast to a single shape
※ 編輯: yimean (106.1.36.147 臺灣), 01/29/2020 10:46:06
→ TitanEric: group by後好像變成series不是dataframe 所以不太能用 01/29 11:44
→ TitanEric: index方式取值 01/29 11:44
→ TitanEric: 可以試試plt(V.index, V.values) 01/29 11:45
→ yimean: @T大感謝回應,還是不行,我把V.index跟V.values印出來 01/29 12:03
print(V.index)
print(V.values)
長這樣
Int64Index([1, 3, 6, 10, 12], dtype='int64', name='月')
[[ 7000]
[ 5000]
[12000]
[12500]
[ 7000]]
※ 編輯: yimean (106.1.36.147 臺灣), 01/29/2020 12:04:08
→ yimean: 我最終找到這個解法S=V.unstack() 01/29 12:12
→ yimean: plt.bar(V.index, S.values) 但是我不知道為什麼。 01/29 12:13
推 karco: 因為shape不同啊 01/29 12:21
→ karco: 一個是(5,)一個是(5,1) 01/29 12:21
→ karco: 所以他說mismatch 01/29 12:21
→ karco: 因此做unstack後 01/29 12:21
→ karco: 兩個shape都是(5,) 01/29 12:21
→ karco: 就能畫了 01/29 12:21
→ yimean: @k大,原來如此,感謝指導。這一路走來真是漫長呢哈哈。 01/29 14:40
推 poototo: 用jupyter看顯示出的樣子久了,可以看出V是Series 01/29 20:49
→ poototo: series.to_frame().plot.bar() 轉成df再畫也OK 01/29 20:51
→ poototo: 你就不用拆x跟y,也可以同年份多欄位的bar一次畫出來 01/29 20:54