Python - 计算每月总金额或销售额

时间:2021-03-14 13:31:55

标签: python pandas-groupby pandas-resample

我有一个包含多个 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) 结果:

enter image description here

2 个答案:

答案 0 :(得分:0)

也许这会让你朝着正确的方向前进。

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()

答案 1 :(得分:0)

忽略警告,您的 ORDERDATE 列似乎包含索引而不是日期。索引类型为:'Int64Index'

为什么?因为它需要第一列,'ORDERID' 而不是 ORDERDATE 准确地确定您要使用的列(也称为键),您应该可以使用了。

Motorcycles.groupby(pd.Grouper(key='ORDERDATE', freq='M'))