Điều này có thể dễ giải thích hơn với một tập dữ liệu mẫu.
Tạo dữ liệu mẫu
Giả sử chúng ta có một cột Dấu thời gian date
và một cột khác mà chúng ta muốn thực hiện tổng hợp a
,.
df = pd.DataFrame({'date':pd.DatetimeIndex(['2012-1-1', '2012-6-1', '2015-1-1', '2015-2-1', '2015-3-1']),
'a':[9,5,1,2,3]}, columns=['date', 'a'])
df
date a
0 2012-01-01 9
1 2012-06-01 5
2 2015-01-01 1
3 2015-02-01 2
4 2015-03-01 3
Có một số cách để nhóm theo năm
- Sử dụng trình truy cập dt với thuộc
year
tính
- Đưa
date
vào chỉ mục và sử dụng chức năng ẩn danh để truy cập năm
- Sử dụng
resample
phương pháp
- Chuyển đổi sang thời kỳ gấu trúc
.dt
người tiếp cận với year
tài sản
Khi bạn có một cột (chứ không phải chỉ mục) của Dấu thời gian gấu trúc, bạn có thể truy cập vào nhiều thuộc tính và phương thức bổ sung khác bằng trình truy cập dt
. Ví dụ:
df['date'].dt.year
0 2012
1 2012
2 2015
3 2015
4 2015
Name: date, dtype: int64
Chúng tôi có thể sử dụng điều này để tạo nhóm của mình và tính toán một số tổng hợp trên một cột cụ thể:
df.groupby(df['date'].dt.year)['a'].agg(['sum', 'mean', 'max'])
sum mean max
date
2012 14 7 9
2015 6 2 3
đưa ngày vào chỉ mục và sử dụng chức năng ẩn danh để truy cập năm
Nếu bạn đặt cột ngày làm chỉ mục, nó sẽ trở thành một DateTimeIndex với các thuộc tính và phương thức giống như trình truy cập dt
cung cấp cho các cột bình thường
df1 = df.set_index('date')
df1.index.year
Int64Index([2012, 2012, 2015, 2015, 2015], dtype='int64', name='date')
Điều thú vị là khi sử dụng phương thức theo nhóm, bạn có thể chuyển cho nó một hàm. Hàm này sẽ được truyền ngầm chỉ mục của DataFrame. Vì vậy, chúng ta có thể nhận được kết quả tương tự từ trên với những điều sau:
df1.groupby(lambda x: x.year)['a'].agg(['sum', 'mean', 'max'])
sum mean max
2012 14 7 9
2015 6 2 3
Sử dụng resample
phương pháp
Nếu cột ngày của bạn không có trong chỉ mục, bạn phải chỉ định cột có on
tham số. Bạn cũng cần chỉ định bí danh bù đắp dưới dạng một chuỗi.
df.resample('AS', on='date')['a'].agg(['sum', 'mean', 'max'])
sum mean max
date
2012-01-01 14.0 7.0 9.0
2013-01-01 NaN NaN NaN
2014-01-01 NaN NaN NaN
2015-01-01 6.0 2.0 3.0
Chuyển đổi sang thời kỳ gấu trúc
Bạn cũng có thể chuyển đổi cột ngày tháng sang đối tượng Dấu chấm gấu trúc. Chúng ta phải chuyển vào bí danh offset dưới dạng một chuỗi để xác định độ dài của Dấu chấm.
df['date'].dt.to_period('A')
0 2012
1 2012
2 2015
3 2015
4 2015
Name: date, dtype: object
Sau đó, chúng tôi có thể sử dụng nó như một nhóm
df.groupby(df['date'].dt.to_period('Y'))['a'].agg(['sum', 'mean', 'max'])
sum mean max
2012 14 7 9
2015 6 2 3