如何解决Python - 计算每月总金额或销售额
我有一个包含多个 OrderId、销售日期、销售产品等的数据框。 我目前正在尝试计算摩托车销量减少的月份。
这是我写的代码,尝试与 group by 一起计算每个月的总销售量:
Motorcycles =sales_data.loc[sales_data['PRODUCTLINE'] == 'Motorcycles']
Motorcycles['ORDERDATE'] = pd.to_datetime(Motorcycles['ORDERDATE'])
Motorcycles.groupby(pd.Grouper(freq='M'))
警告显示的是: :10: SettingWithCopyWarning: 试图在来自 DataFrame 的切片副本上设置值。 尝试使用 .loc[row_indexer,col_indexer] = value 代替 请参阅文档中的警告:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy 摩托车['ORDERDATE'] = pd.to_datetime(摩托车['ORDERDATE'])
错误显示为: 错误:类型错误:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但得到了一个 'Int64Index' 实例
我也尝试过,但这都不起作用。
Motorcycles.set_index('ORDERDATE').resample('1M').sum()
df.head(10) 结果:
解决方法
也许这会让你朝着正确的方向前进。
sample = {'date' : ['20200121','20200121','20200124','20200222','20200224','20200225'],'Amount' : [10000,10000,5000,6000,7000,8000]}
df = pd.DataFrame(sample)
df['month'] = pd.to_datetime(df['date']).dt.strftime('%Y%m')
df.groupby('month')['Amount'].sum().reset_index()
,
忽略警告,您的 ORDERDATE
列似乎包含索引而不是日期。索引类型为:'Int64Index'
为什么?因为它需要第一列,'ORDERID' 而不是 ORDERDATE
准确地确定您要使用的列(也称为键),您应该可以使用了。
Motorcycles.groupby(pd.Grouper(key='ORDERDATE',freq='M'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。