Python 熊猫-按日期分组
我的目标是在我的数据集的几年内按大小总结数据。我能够分别完成这两项任务(例如,按年份汇总,或按bin汇总),但在结合这两项任务时遇到语法问题 下面是我如何按年份总结数据的方法:Python 熊猫-按日期分组,python,pandas,bin,Python,Pandas,Bin,我的目标是在我的数据集的几年内按大小总结数据。我能够分别完成这两项任务(例如,按年份汇总,或按bin汇总),但在结合这两项任务时遇到语法问题 下面是我如何按年份总结数据的方法: size_summary = df_raw.groupby(['Year'])['Quantity'].describe() 下面是我如何创建我的垃圾箱 mult = 1 bins = [5*mult, 10*mult, 25*mult, 50*mult, 100*mult] groups = df_raw.group
size_summary = df_raw.groupby(['Year'])['Quantity'].describe()
下面是我如何创建我的垃圾箱
mult = 1
bins = [5*mult, 10*mult, 25*mult, 50*mult, 100*mult]
groups = df_raw.groupby(pd.cut(df_raw['Quantity'], bins))
当我尝试将下面的两种方法结合起来时,会收到一条错误消息。有人知道如何结合这些来达到我的目标吗?谢谢你的帮助
groups.groupby(['Year'])['Quantity'].describe()
AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“groupby”,请尝试使用“apply”方法
编辑:根据要求添加示例数据,如下所示
df_raw = pd.DataFrame(data={
'Year': [2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014],
'Quantity': [2.0, 3.0, 78.8, 65.7, 70.0, 61.9, 83.9, 39.7, 44.1, 14.5, 35.3, 82.2, 13.9, 66.6, 65.8, 94.8, 50.8, 17.1, 9.9, 51.1, 62.9, 63.0, 13.5, 37.6, 1.5, 70.7, 23.3, 28.1, 21.9, 60.7, 1.1, 67.2, 0.4, 81.4, 86.7, 36.2, 45.2, 50.4, 43.3]
})
所需的输出格式如下-对屏幕截图表示歉意 你真的很接近。请试试这个:
mult = 1
bins = [0, 5*mult, 10*mult, 25*mult, 50*mult, 100*mult]
df_raw['bin'] = pd.cut(df_raw['Quantity'], bins)
df_raw.pivot_table(index = 'bin', columns = 'Year', aggfunc = 'count')
作为
pivot\u table
的替代方案,您可以按箱子和年份分组,然后通过取消堆叠
重新格式化数据:
# first group by bins, then by year
groups = df_raw.groupby([pd.cut(df_raw['Quantity'], bins), 'Year'])
# compute group size, pivot into the shape you want
counts = groups.size().unstack(fill_value=0)
counts
2012年2013年2014年
量
(5, 10] 0 1 0
(10, 25] 2 3 1
(25, 50] 3 2 3
(50, 100] 7 7 5
这比您提供的示例数据的透视表快约2.5倍
要将分类间隔索引拆分为
多索引
,请使用以下命令
def interval_to_tuple(interval):
return interval.left, interval.right
counts.set_index(
counts.index.astype(object).map(interval_to_tuple).rename(['Lower', 'Upper']))
2012年2013年2014年
上下
5 10 0 1 0
10 25 2 3 1
25 50 3 2 3
50 100 7 7 5
您应该能够将此结果导出到Excel中而不会出现问题。请发布一个示例数据集和所需的输出。根据要求,请查看编辑。您知道如何将其正确导出到Excel中吗?间隔索引给出了它trouble@Z_D,请参阅编辑。其思想是将分类间隔索引拆分为列(或者像我所做的那样,索引级别)。这并不漂亮,可能还有更好的方法。