2015-04-30 41 views
6

Tôi có một khung dữ liệu như thế này:Làm thế nào để tạo Pandas groupby lô với subplots?

 value  identifier 
2007-01-01 0.781611  55 
2007-01-01 0.766152  56 
2007-01-01 0.766152  57 
2007-02-01 0.705615  55 
2007-02-01 0.032134  56 
2007-02-01 0.032134  57 
2008-01-01 0.026512  55 
2008-01-01 0.993124  56 
2008-01-01 0.993124  57 
2008-02-01 0.226420  55 
2008-02-01 0.033860  56 
2008-02-01 0.033860  57 

Vì vậy, tôi làm một groupby mỗi định danh:

df.groupby('identifier') 

Và bây giờ tôi muốn tạo ra ô phụ trong một mạng lưới, một cốt truyện cho mỗi nhóm. Tôi đã thử cả

df.groupby('identifier').plot(subplots=True) 

hoặc

df.groupby('identifier').plot(subplots=False) 

plt.subplots(3,3) 
df.groupby('identifier').plot(subplots=True) 

vô ích. Làm thế nào tôi có thể tạo ra các đồ thị?

+0

kiểm tra 'seaborn', điều này thực sự có ý nghĩa hay không. – cphlewis

+0

Cảm ơn, nhưng tôi đang cố gắng tránh seaborn và chỉ sử dụng matplotlib thay thế. Phụ thuộc và môi trường Windows, v.v. – Ivan

Trả lời

5

Đây là bố cục tự động với nhiều nhóm (dữ liệu giả ngẫu nhiên) và chơi xung quanh với grouped.get_group(key) sẽ chỉ cho bạn cách thực hiện các ô thanh lịch hơn.

import pandas as pd 
from numpy.random import randint 
import matplotlib.pyplot as plt 


df = pd.DataFrame(randint(0,10,(200,6)),columns=list('abcdef')) 
grouped = df.groupby('a') 
rowlength = grouped.ngroups/2       # fix up if odd number of groups 
fig, axs = plt.subplots(figsize=(9,4), 
         nrows=2, ncols=rowlength,  # fix as above 
         gridspec_kw=dict(hspace=0.4)) # Much control of gridspec 

targets = zip(grouped.groups.keys(), axs.flatten()) 
for i, (key, ax) in enumerate(targets): 
    ax.plot(grouped.get_group(key)) 
    ax.set_title('a=%d'%key) 
ax.legend() 
plt.show() 

enter image description here

+0

Bạn đã đề cập sửa lỗi nếu lẻ, vì vậy: rowlength = grouped.ngroups/2 + (0 nếu grouped.ngroups% 2 == 0 else 1) –

+0

Sẽ rất hữu ích khi hiểu rằng lý do tác phẩm này là rằng bạn tạo ra một loạt các trục, và vượt qua từng đối tượng trục lần lượt đến từng nhóm được vẽ. Bạn đang điền vào từng hình con với một lô phụ nhóm. Khéo léo! –

6

Bạn làm sử dụng tổng hợp để nhận các identifiers trong các cột và sau đó âm mưu

pd.pivot_table(df.reset_index(), 
       index='index', columns='identifier', values='value' 
      ).plot(subplots=True) 

enter image description here

Và, đầu ra của

pd.pivot_table(df.reset_index(), 
       index='index', columns='identifier', values='value' 
       ) 

Có vẻ như -

identifier  55  56  57 
index 
2007-01-01 0.781611 0.766152 0.766152 
2007-02-01 0.705615 0.032134 0.032134 
2008-01-01 0.026512 0.993124 0.993124 
2008-02-01 0.226420 0.033860 0.033860 
Các vấn đề liên quan