Lưu ý: Hiện tại Series có trình truy cập dt thì điều quan trọng là ngày đó là chỉ mục, mặc dù ngày/giờ vẫn cần phải là datetime64.
Cập nhật: Bạn có thể làm groupby trực tiếp hơn (không có lambda):
In [21]: df.groupby([df["Date/Time"].dt.year, df["Date/Time"].dt.hour]).mean()
Out[21]:
Value
Date/Time Date/Time
2010 0 60
1 50
2 52
3 49
In [22]: res = df.groupby([df["Date/Time"].dt.year, df["Date/Time"].dt.hour]).mean()
In [23]: res.index.names = ["year", "hour"]
In [24]: res
Out[24]:
Value
year hour
2010 0 60
1 50
2 52
3 49
Nếu đó là một datetime64 index bạn có thể làm:
In [31]: df1.groupby([df1.index.year, df1.index.hour]).mean()
Out[31]:
Value
2010 0 60
1 50
2 52
3 49
Cũ câu trả lời (sẽ chậm hơn):
Như suming Ngày/Giờ là chỉ số * Bạn có thể sử dụng một chức năng lập bản đồ trong groupby:
In [11]: year_hour_means = df1.groupby(lambda x: (x.year, x.hour)).mean()
In [12]: year_hour_means
Out[12]:
Value
(2010, 0) 60
(2010, 1) 50
(2010, 2) 52
(2010, 3) 49
Đối với một chỉ số hữu ích hơn, sau đó bạn có thể tạo ra một MultiIndex từ tuples:
In [13]: year_hour_means.index = pd.MultiIndex.from_tuples(year_hour_means.index,
names=['year', 'hour'])
In [14]: year_hour_means
Out[14]:
Value
year hour
2010 0 60
1 50
2 52
3 49
* nếu không, sau đó đầu tiên sử dụng set_index
:
df1 = df.set_index('Date/Time')
Cảm ơn rất nhiều. Tôi đã cố gắng với các vòng nhưng đây là một cách tốt hơn nhiều. –
PS: Có ai có thể điền vào "x.year" hoặc "x.hour" của "df1.groupby (lambda x: (x.year, x.hour)). Nghĩa là() " làm thông số động vào hàm lamda? Xác định Varialbe1 = x.year và Variable2 = x.hour cho "df1.groupby (lambda x: (Variable1, Variable2)). Nghĩa là() " dường như không hoạt động. –
@MarkusW Bạn nên hỏi đó là một câu hỏi mới:) ... có vẻ như bạn muốn sử dụng một chức năng thích hợp (ví dụ: không phải là lambda) –