2014-06-06 35 views
39

datetime Xem xét một tập tin csv:gấu trúc dataframe groupby tháng

string,date,number 
a string,2/5/11 9:16am,1.0 
a string,3/5/11 10:44pm,2.0 
a string,4/22/11 12:07pm,3.0 
a string,4/22/11 12:10pm,4.0 
a string,4/29/11 11:59am,1.0 
a string,5/2/11 1:41pm,2.0 
a string,5/2/11 2:02pm,3.0 
a string,5/2/11 2:56pm,4.0 
a string,5/2/11 3:00pm,5.0 
a string,5/2/14 3:02pm,6.0 
a string,5/2/14 3:18pm,7.0 

tôi có thể đọc trong, và định dạng lại cột ngày sang định dạng datetime:

b=pd.read_csv('b.dat') 
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p') 

Tôi đã cố gắng để nhóm dữ liệu theo tháng. Có vẻ như có một cách rõ ràng để truy cập vào tháng và nhóm theo đó. Nhưng tôi dường như không thể làm được. Có ai biết làm thế nào?

Những gì tôi hiện đang cố gắng là tái lập chỉ mục theo ngày:

b.index=b['date'] 

tôi có thể truy cập vào tháng như vậy:

b.index.month 

Tuy nhiên tôi dường như không thể tìm thấy một chức năng để cùng nhau theo tháng.

Trả lời

76

Managed để làm điều đó:

df.groupby(by=[b.index.month, b.index.year]) 

Hoặc

df.groupby(pd.Grouper(freq='M')) # update for v0.21+ 
+36

Tôi nghĩ rằng nhiều cách pandonic hơn là sử dụng 'resample' (khi nó cung cấp chức năng bạn cần) hoặc sử dụng' TimeGrouper': 'df.groupby (pd.TimeGrouper (freq = ' M ')) ' –

+5

để có được kết quả DataFrame tổng hoặc trung bình,' df.groupby (pd.TimeGrouper (freq =' M ')). Sum() 'hoặc' df.groupby (pd.TimeGrouper (freq =' M ')). mean() ' – Alexandre

12

(update: 2018)

Lưu ý rằng pd.Timegrouper được khấu hao và sẽ bị xóa. Thay vào đó, hãy sử dụng:

df.groupby(pd.Grouper(freq='M')) 
+1

Đọc trong năm 2018 :) – jtromans

Các vấn đề liên quan