2013-04-28 64 views
32

Điều này có vẻ như nó sẽ được khá thẳng về phía trước nhưng sau gần một ngày toàn bộ tôi đã không tìm thấy giải pháp. Tôi đã tải dataframe của mình với read_csv và dễ dàng phân tích cú pháp, kết hợp và lập chỉ mục cột ngày và cột thành một cột nhưng giờ tôi muốn có thể định dạng lại và thực hiện các phép tính dựa trên nhóm giờ và phút tương tự như những gì bạn có thể làm excel pivot.Python Pandas: Nhóm datetime cột thành giờ và phút tập hợp

Tôi biết cách đổi mẫu thành giờ hoặc phút nhưng nó duy trì phần ngày được liên kết với mỗi giờ/phút trong khi tôi muốn tổng hợp tập dữ liệu CHỈ thành giờ và phút tương tự như nhóm trong các trục excel và chọn "giờ" "phút" nhưng không chọn bất cứ thứ gì khác.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Bạn có thể nhận đối tượng 'time' từ mỗi' datetime' mà bạn có? Bạn có thể tạo một đối tượng 'pandas.Series' từ' dataframe.index' của bạn và sau đó gán nó cho chỉ mục (thay thế giá trị hiện tại). Bạn có thể "in" một số hàng của khung dữ liệu của bạn không? – heltonbiker

+1

Cảm ơn bạn. Tôi không quen với việc sử dụng đối tượng thời gian để lấy thời gian từ cột ngày giờ nếu đó là ý của bạn. Tôi chỉ tìm ra một cách rất gần với những gì tôi cần bằng cách sử dụng đoạn mã sau cho từng giờ và từng phút tương ứng nhưng có cách nào dễ hơn để làm điều đó, đặc biệt là cách để có giờ và phút với nhau ?: hourly = ims_havas.groupby (ims_havas.index.hour) .sum() – horatio1701d

Trả lời

33

bạn không thể làm gì, ở đâu df là DataFrame của bạn:

times = pd.to_datetime(df.timestamp_col) 
df.groupby([times.hour, times.minute]).value_col.sum() 
+0

Peeerfect! Cảm ơn bạn rất nhiều vì đã dành phần còn lại của ngày của tôi! – horatio1701d

+0

Có hoạt động hoàn hảo cho tôi quá nhưng tôi đã theo dõi câu hỏi: làm thế nào tôi có thể sử dụng "chuỗi thời gian nhóm" này như trục x của tôi trong một matlibplot? –

+0

Tôi phải làm với 'df.groupby ([times.dt.hour, times.dt.minute]) ...' – akilat90

9

đi qua này khi tôi đang tìm kiếm loại này groupby. Mã của Wes ở trên không hiệu quả đối với tôi, không chắc chắn vì đó là do những thay đổi trong pandas theo thời gian.

Trong pandas 0.16.2, những gì tôi đã làm cuối cùng là:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))]) 
grp.count() 

Bạn sẽ phải (giờ, phút) tuples như chỉ số nhóm. Nếu bạn muốn nhiều chỉ mục:

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour), 
         data.datetime_col.map(lambda x : x.minute)]) 
21

Mã 'Wes không hoạt động đối với tôi. Nhưng hàm DatetimeIndex (docs) đã làm:

times = pd.DatetimeIndex(data.datetime_col) 
grouped = df.groupby([times.hour, times.minute]) 

Đối tượng DatetimeIndex là đại diện của thời gian trong gấu trúc. Dòng đầu tiên tạo ra một mảng các datetimes. Dòng thứ hai sử dụng mảng này để lấy dữ liệu giờ và phút cho tất cả các hàng, cho phép dữ liệu được nhóm lại (docs) theo các giá trị này.

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