试图分组并总结在python

时间:2019-06-13 01:50:51

标签: python group-by

基本上,我希望垃圾箱位于自己的一栏中,请参见代码和输出。 Python

    graph_data = housing_data.groupby(['Date','Bins']).Price.mean()

    graph_data
Date     Bins    
2016-01  (5, 10]              NaN
         (10, 15]    1.009000e+06
2016-03  (0, 5]      1.244532e+06
         (5, 10]     1.221559e+06
         (10, 15]    1.098541e+06
2016-04  (0, 5]      1.085015e+06
         (5, 10]     1.086503e+06
         (10, 15]    9.220241e+05
2016-05  (0, 5]      1.019418e+06
         (5, 10]     1.139064e+06
         (10, 15]    9.416809e+05

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您是在要求将数据重塑为所谓的宽格式数据。您当前拥有的是长格式数据。要在pandas中的两个之间来回切换,请使用meltpivot(或stackunstack)。 (Check out this postmy more general post。)

我没有您的数据,但是请尝试

(housing_data.groupby(['Date', 'Bins'])
             .agg({'Price': 'mean'})
             .reset_index()
             .pivot(index='Date', columns='Bins', 
                    values='Price'))

(不幸的是,reset_index行迫使熊猫在agg命令之后再次将Date识别为列。)

如果要重命名垃圾箱,可以在groupby调用之前使用rename,但是如果仅使用pd.cut创建自己的垃圾箱,则会更容易。这是使用iris的示例:

import seaborn as sns
import pandas as pd

iris = sns.load_dataset('iris')
iris['bins'] = pd.cut(iris['sepal_length'], 
                      bins=3, 
                      labels=['lo', 'med', 'hi'])
(iris.groupby(['species', 'bins'])
     .agg({'sepal_length': 'mean'})
     .reset_index()
     .pivot(index='species', columns='bins', 
            values='sepal_length'))
bins        lo          med         hi
species         
setosa      4.959574    5.733333    NaN
versicolor  5.281818    6.055556    6.900000
virginica   4.900000    6.265625    7.294118