2017-06-08 127 views
0

我想問你關於帖子「Plotting grouped data in same plot using Pandas」的擴展。當我們多次應用函數'groupby'時,這種擴展就會發揮作用。具體來說,我有興趣繪製這個功能。我正在處理下面的行,這與功能圖不兼容。熊貓dataframe groupby plot(擴展名)

線:

f=s['Amount'].groupby([s['classe'],s['Month'],s['Year']]).sum() 

其中總結了 '金額' 和組 'CLASSE', '月' 和 '年'。爲簡單起見,讓「年份」總是相同的價值:2017年

現在我想提出以下情節:

  • 塊「月VS金額」爲特定類型的「CLASSE」

我嘗試:

for label, df in s.groupby('classe').get_group('Rent'): 
     df.plot.scatter(x='Month', y='Amount', s=50) 
plt.show() 

那裏租代表上述 'CLASSE' 的具體。這種嘗試不起作用,並沒有考慮到「金額」的總和。我無法將這種'sum()'與功能圖一起使用。顯然,這些沒有get_group('Rent')的行給了我許多類的地塊。他們還沒有計入「金額」。任何想法/建議?

我也嘗試使用pivot_table,如下面的代碼所示。我可以將所有情節放在一起,但我不能策劃一個班級。這裏我嘗試:

test=pd.pivot_table(s,index=['classe','Month','Year'],values=['Amount'],aggfunc=np.sum) 
test.unstack('classe').unstack('Year').plot(kind='area', figsize,[16,6],stacked=False,colormap='autumn').legend(loc=2,prop={'size':9}) 
plt.show() 

image

任何意見/建議或很好的例子?我想了解如何從這些pivot_tablegroupby函數中繪製出我想要的任何內容。

+0

編輯隊列已滿,這樣我就可以:下面應該始終通過定義種子再現相同的正數隨機數據顯示不添加它,但看起來像[this](https://stackoverflow.com/questions/28293028/plotting-grouped-data-in-same-plot-using-pandas)是questio你指的是? – whrrgarbl

+0

我已經讀過它,但它不是我的情況。 'groupby'僅用於一次:p_df.groupby('class')。在我的情況下,我想分成幾列:'類','月','年':( – fdrigo

+0

嘿,我只是把它連接起來,以節省某人的時間來查找它我能夠建議編輯剛剛添加並更新標籤,希望有更多熊貓知識的人可以看到它!如果它是Python版本特定版本,請隨時編輯版本標籤。 – whrrgarbl

回答

0

每位唯一CLASSE通過您當前pivot_tableunstack程序循環過濾考慮。

import pandas as pd 
import numpy as np 
import random 
from matplotlib import pyplot as plt 

np.random.seed(176) 
random.seed(16) 

df = pd.DataFrame({'classe': random.sample(list('ABCDE')*50, k=15), 
        'Amount': np.random.sample(15)*100, 
        'Year': random.sample(list(range(2010,2018))*50, k=15), 
        'Month': random.sample(list(range(1,12))*50, k=15)}) 

for cls in df['classe'].unique(): 
    # AREA GRAPH 
    test = pd.pivot_table(df[df['classe']==cls], index=['classe', 'Month', 'Year'], values=['Amount'], aggfunc=np.sum) 
    test.unstack('classe').unstack('Year').plot(kind='area', figsize=(16,6), stacked=False, colormap='autumn').legend(loc=2,prop={'size':9}) 

    # SCATTER PLOT 
    test = pd.pivot_table(df[df['classe']==cls], index=['classe', 'Month', 'Year'], values=['Amount'], aggfunc=np.sum).reset_index()  
    test.plot(kind='scatter', x='Month',y='Amount', figsize=(16,6), stacked=False).legend(loc=2,prop={'size':9}) 
    plt.show() 

plt.clf() 
plt.close() 

區域圖輸出

Class A Graph Class B Graph Class C Graph Class D Graph Class E Graph

+0

謝謝。現在很清楚!最後一個問題。如果我想獲得散點圖而不是「區域」類圖,我可以修改代碼嗎?下面的代碼:「test.unstack('classe')。unstack('Year')。plot.scatter(x ='Month',y ='Amount',figsize =(16,6),stacked = False,colormap ='autumn')。legend(loc = 2,prop = {'size':9})「 給了我錯誤」KeyError:Month「...感謝你進入 – fdrigo

+0

你不需要'unstack'方法。只需使用'reset_index()'運行'pivot_table'即可將* Month *作爲級別0列而不是層級1進行運行。然後運行scatter。請參閱編輯。注意* colormap *被刪除。 – Parfait

+0

非常感謝。我想總結一下我得到的所有信息只有一個散點圖。是否有可能通過使用這種迭代方法?用不同的顏色更好。此外,如果我使用您的代碼並希望在每個散點圖上看到特定的文字,我該怎麼做?非常感謝@Parfait – fdrigo