2012-04-01 111 views
8

我有一個熊貓DataFrame與日期列。這不是一個索引。熊貓pivot_table日期

我想在每個位置使用每月計數聚合數據框上的pivot_table。

的數據看起來像這樣:

['INDEX']     DATE LOCATION COUNT 
0   2009-01-02 00:00:00  AAH  1 
1   2009-01-03 00:00:00  ABH  1 
2   2009-01-03 00:00:00  AAH  1 
3   2009-01-03 00:00:00  ABH  1 
4   2009-01-04 00:00:00  ACH  1

我使用:

pivot_table(cdiff, values='COUNT', rows=['DATE','LOCATION'], aggfunc=np.sum)

樞轉的值。我需要一種方法將cdiff.DATE轉換爲一個月而不是日期。 我希望喜歡的東西來結束: 的數據是這樣的:

 
    MONTH LOCATION COUNT 
January  AAH  2 
January  ABH  2 
January  ACH  1 

我試過的strftime方法所有的方式在cdiff.DATE沒有成功。它想要應用到字符串,而不是系列對象。

+0

我提供了這個[幾個具體的例子和替代方法** Q&A ** ](https://stackoverflow.com/q/47152691/2336654)您或其他人可能會發現有幫助。 – piRSquared 2017-11-11 22:24:14

回答

11

我建議:

months = cdiff.DATE.map(lambda x: x.month) 
pivot_table(cdiff, values='COUNT', rows=[months, 'LOCATION'], 
      aggfunc=np.sum) 

爲了得到一個月份名稱,通過不同的功能,或者使用內置的calendar.month_name。爲了得到你想要的格式的數據,你應該叫reset_index的結果,或者你也可以這樣做:

cdiff.groupby([months, 'LOCATION'], as_index=False).sum()

+2

謝謝@Wes,'cdiff ['month'] = cdiff.DATE.apply(lambda x:datetime.datetime.strftime(x,'%B'))'把竅門轉換成了幾個月。 – John 2012-04-03 09:33:26