你可以對每個組每月resample
。
因此第一 '日期' 列轉換爲datetime:
df['Date'] = pd.to_datetime(df['Date'])
然後將其設置爲指標,GROUPBY上['Code', 'ID']
,然後對每個組應用resample
:
df.set_index('Date').groupby(['Code', 'ID']).resample('M', 'sum')
In [6]: df = pd.DataFrame({'Code':100, 'ID':200, 'Date':pd.date_range("2012-01-01", periods=10, freq='10D'), 'Sum':np.random.randint(10, size=10)})
In [7]: df
Out[7]:
Code Date ID Sum
0 100 2012-01-01 00:00:00 200 1
1 100 2012-01-11 00:00:00 200 9
2 100 2012-01-21 00:00:00 200 5
3 100 2012-01-31 00:00:00 200 9
4 100 2012-02-10 00:00:00 200 8
5 100 2012-02-20 00:00:00 200 3
6 100 2012-03-01 00:00:00 200 9
7 100 2012-03-11 00:00:00 200 8
8 100 2012-03-21 00:00:00 200 3
9 100 2012-03-31 00:00:00 200 5
In [8]: df.set_index('Date').groupby(['Code', 'ID']).resample('M', 'sum')
Out[8]:
Code ID Sum
Code ID Date
100 200 2012-01-31 400 800 24
2012-02-29 200 400 11
2012-03-31 400 800 25
要繪製它,這樣的事情應該這樣做:
fig, ax = plt.subplots()
for name, group in df.set_index('Date').groupby(['Code', 'ID']):
group['Sum'].resample('M', 'sum').plot(ax=ax, label=name)
但你也可以繼續與您的卓有成效的工作,「拆散」(帶指數水平列),然後劇情:
df2 = df.set_index('Date').groupby(['Code', 'ID']).resample('M', 'sum')
df2['Sum'].unstack([0,1]).plot()
見http://stackoverflow.com/questions/17450313/summing-over-months-with-pandas – cyborg