Pandas dataframe groupby plot(extension)

时间:2017-06-08 16:52:30

标签: python pandas

我想问你关于帖子的延伸" Plotting grouped data in same plot using Pandas"。当我们应用函数' groupby'时,这种扩展会发挥作用。不止一次。具体来说,我有兴趣绘制这个函数。我正在处理下面的行,这与功能图不兼容。

行:

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

总结超过'金额'和群体' classe','月'和'年'。为简单起见,让我们来看看年份。永远是相同的价值:2017年。

现在我想制作以下情节:

  • 情节'月比数'对于特定类型的' classe'

我的尝试:

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

其中Rent代表具体的上述' 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函数中绘制出我想要的内容。

1 个答案:

答案 0 :(得分:0)

考虑按照当前pivot_tableunstack例程循环的每个唯一 Classe 进行过滤。下面用正数随机数据进行演示,该数据应始终通过定义的种子重现相同:

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