2014-10-22 40 views
5

Tôi đang cố gắng để chuyển đổi một unstacked, đa lập chỉ mục dữ liệu-frame trở lại một đơn gấu trúc chỉ số datetime.Chuyển đổi gấu trúc đa-index để gấu trúc timestamp

Chỉ số gốc dữ liệu-frame của tôi, tức là trước khi đa chỉ mục và unstacking, trông như thế này:

In [1]: df1_season.index 
Out [1]: 

<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-05-01 02:00:00, ..., 2014-07-31 23:00:00] 
Length: 1472, Freq: None, Timezone: None 

sau đó tôi áp dụng nhiều chỉ mục và unstacking vì vậy tôi có thể vẽ đồ thị dữ liệu hàng năm trên đầu trang của mỗi khác như thế này:

df_sort = df1_season.groupby(lambda x: (x.year, x.month, x.day, x.hour)).agg(lambda s: s[-1]) 
df_sort.index = pd.MultiIndex.from_tuples(df_sort.index, names=['Y','M','D','H']) 
unstacked = df_sort.unstack('Y') 

My mới dữ liệu khung cho hai ngày đầu tiên của tháng trông như thế này:

In [2]: unstacked 
Out [2]: 

      temp  season   
Y  2013 2014 2013 2014 
M D H        
5 1 2 24.2 22.3 Summer Summer 
    8 24.1 22.3 Summer Summer 
    14 24.3 23.2 Summer Summer 
    20 24.6 23.2 Summer Summer 
    2 2 24.2 22.5 Summer Summer 
    8 24.8 22.2 Summer Summer 
    14 24.9 22.4 Summer Summer 
    20 24.9 22.8 Summer Summer 

736 rows × 4 columns 

Chỉ số cho khung dữ liệu mới hiển thị ở trên bây giờ trông như thế này:

In [2]: unstacked.index.values[0:8] 
Out [2]: 

array([(5, 1, 2), (5, 1, 8), (5, 1, 14), (5, 1, 20), (5, 2, 2), (5, 2, 8), (5, 2, 14), 
     (5, 2, 20], dtype=object) 

mà không tạo ra một âm mưu rất đẹp đối với xticks (lớn và nhỏ) với. Nếu tôi có thể chuyển đổi nhiều chỉ mục này trở lại chỉ số datetime một ngày, chỉ sử dụng dữ liệu tháng, ngày và giờ, thì các dấu chính/nhỏ sẽ được vẽ theo cách tự động theo cách tôi muốn (tôi nghĩ). Ví dụ:

giải pháp hiện tại:

xticks = (5, 1, 2), (5, 1, 8) … (5, 2, 20) 

giải pháp yêu cầu:

xticks(major) = Day, Month (displayed as MAY 01, MAY 02 etc etc) 
xticks(minor) = Hour (displayed as 02h 08h … 20h) 
+0

Ngay cả một gợi ý nhỏ cũng sẽ được đánh giá cao. – roi3i3ie

+0

Tôi làm cách nào để giải quyết vấn đề này? Có một số câu hỏi ở đây hơn một tuổi mà không có bất kỳ câu trả lời nào. – roi3i3ie

+0

Một tháng khác? Bất cứ điều gì ở tất cả sẽ giúp ... – roi3i3ie

Trả lời

0
import pandas as pd 
import matplotlib.pyplot as plt 
from numpy.random import randn 

ts = pd.Series(randn(1000), index=pd.date_range('1/1/2000', periods=1000)) 
ts = ts.cumsum() 

plt.figure() 
for year in set(ts.index.year): 
    tmp = ts[str(year)].values 
    plt.plot(tmp, label = year) 
plt.legend() 
plt.show() 

Tôi nghĩ rằng đây là một cách tốt hơn để hoàn thành mục tiêu của mình hơn là tái lập chỉ mục. Bạn nghĩ sao?

+0

Hey !, cảm ơn rất nhiều vì đã trả lời. Ok, tôi vừa cho đi. Có, điều này dường như là một cách dễ dàng hơn để xếp chồng/phân loại dữ liệu hàng năm trên đầu trang của mỗi thành một cốt truyện, vì vậy cảm ơn vì điều đó. Tuy nhiên, nó không phải là một giải pháp cho câu hỏi. Thay vì xticks của tôi, nhỏ/lớn, được mã hóa hàng năm (ví dụ: ngày tháng giờ), chúng bây giờ chỉ được chia thành các khối dữ liệu đơn lẻ tùy ý, tỷ lệ từ 0 đến n-1, trong đó n là số dữ liệu trong phép đo của tôi bộ mẫu. – roi3i3ie

+0

Phải, tôi sẽ tưởng tượng tại thời điểm đó đó là một thao tác đánh dấu x_axis ... nhưng tôi không thể tìm ra cách chính xác để làm điều đó. Có lẽ bạn có thể tải dữ liệu lên đến một csv một nơi nào đó để tôi có thể chơi với nó và có thể tạo một bài đăng về điều này? Thuật ngữ tốt nhất cho cụm từ này có phải là 'Bản đồ theo mùa' - lấy thông tin từ nhiều năm và vẽ chúng trên một trục tháng 1-tháng 12 không? Tôi không thể tìm thấy bất kỳ tài liệu nào về cách thực hiện điều này gây ngạc nhiên cho tôi – EngineeredE

+0

Hey! Tôi đã đi, xin lỗi vì sự chậm trễ. Hãy để tôi lấy lại cho bạn về điều này. Tôi cũng sẽ nhận được một csv cho bạn. Có cho câu hỏi của bạn nữa. Đó là chính xác những gì cốt truyện là tất cả về. – roi3i3ie

1

Chuyển đổi dữ liệu qua lại trong gấu trúc bị lộn xộn rất nhanh, như bạn dường như đã gặp phải. Khuyến nghị của tôi nói chung liên quan đến gấu trúc và lập chỉ mục, là không bao giờ chỉ cần thiết lập chỉ mục, nhưng để sao chép nó trước tiên. Hãy chắc chắn rằng bạn có một cột có chứa chỉ mục, vì gấu trúc không cho phép tất cả các hoạt động trên chỉ mục và cài đặt dữ dội và việc đặt lại chỉ mục có thể khiến các cột biến mất.

TLDR; Không chuyển đổi chỉ mục trở lại. Giữ một bản sao.

+0

Điều này cũng xảy ra với nguyên tắc mở/đóng: http://en.wikipedia.org/wiki/Open/closed_principle – firelynx

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