在pandas DataFrame对象中按类别分组输出到字典对象

时间:2015-02-12 04:59:35

标签: python-3.x pandas group-by

我有一个pandas DataFrame对象,如下所示:

    In [106]: df
    Out [106]: df[
                     Amount       Category         
          date
    2014-08-05        18.40        Thing01  
    2014-08-05       192.60        Thing01
    2014-08-05        10.42        Thing02
    2014-08-05        13.34        Thing07
    2014-08-05       364.56        Thing04
    2014-08-05       843.21        Thing03
    2014-08-04        14.65        Thing04
    2014-08-04        56.98        Thing11
    2014-08-04        76.21        Thing99
    2014-08-04       786.22        Thing99
    2014-08-04        87.44        Thing99
    2014-08-04        53.23        Thing01
    2014-08-04        32.12        Thing99
    ]

我想按“类别”对这些数据进行分组,并使用结果创建一个如下所示的Python字典:

In [107]: OutInfo
Out [107]: OutInfo = {

     Thing01:
                           Amount
                date             
          2014-08-05        18.40
          2014-08-05       192.60
          2014-08-04        53.23

     Thing02:
                           Amount
                date    
          2014-08-05        10.42

     Thing07:
                           Amount
                date
          2014-08-05        13.34

     Thing04:
                           Amount
                date
          2014-08-05       364.56
          2014-08-04        14.65

     Thing03:
                           Amount
                date
          2014-08-05       843.21

     Thing11:
                           Amount
                date
          2014-08-04        56.98

     Thing99:
                           Amount
                date
          2014-08-04        76.21
          2014-08-04       786.22
          2014-08-04        87.44
 }

我尝试过使用如下命令:df.groupby(“Category”),最后包含各种函数,包括.apply方法(我也不完全理解......)。我尝试了其他方法,但事实上我有一天有多个条目阻止我使用它们。在此先感谢您的帮助!

-Jeremy

1 个答案:

答案 0 :(得分:0)

groupby是正确的想法。为了得到你想要的东西,你可以做类似

的事情
>>> d = {k: v.drop("Category", axis=1) for k,v in list(df.groupby("Category"))}
>>> pprint.pprint(d)
{'Thing01':             Amount
date              
2014-08-05   18.40
2014-08-05  192.60
2014-08-04   53.23,
[...]
 'Thing99':             Amount
date              
2014-08-04   76.21
2014-08-04  786.22
2014-08-04   87.44
2014-08-04   32.12}

如果您在list对象上调用groupby,则会获得组键/值元组的列表。如果你打电话给dict(list(grouped)),这就变成了字典。但是,通常情况下,您不会像在示例所需的输出中那样删除键列。因此,如果您愿意保留额外的专栏,那就更容易了:

>>> d = dict(list(df.groupby("Category")))
>>> d["Thing01"]
            Amount Category
date                       
2014-08-05   18.40  Thing01
2014-08-05  192.60  Thing01
2014-08-04   53.23  Thing01