在 pandas DataFrame 对象输出到字典对象中按类别分组
Group by category in pandas DataFrame object output to dictionary object
我有一个 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
]
我想按 "Category" 对这些数据进行分组,并使用结果创建一个 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 方法(我也不完全理解...)。我尝试了其他方法,但我一天有多个条目这一事实使我无法使用这些方法。在此先感谢您的帮助!
-杰里米
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}
如果您在 groupby
对象上调用 list
,您将获得一组 key/value 元组的列表。如果你调用 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
我有一个 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
]
我想按 "Category" 对这些数据进行分组,并使用结果创建一个 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 方法(我也不完全理解...)。我尝试了其他方法,但我一天有多个条目这一事实使我无法使用这些方法。在此先感谢您的帮助!
-杰里米
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}
如果您在 groupby
对象上调用 list
,您将获得一组 key/value 元组的列表。如果你调用 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