0

我有一个包含多个 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 -复制摩托车[' ORDERDATE '] = pd.to_datetime(摩托车['ORDERDATE'])

显示的错误是: 错误:TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了“Int64Index”的实例

我也试过了,但这都不起作用。

Motorcycles.set_index('ORDERDATE').resample('1M').sum()

df.head(10) 结果:

在此处输入图像描述

4

2 回答 2

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()
于 2021-03-14T13:48:28.613 回答
0

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

为什么?因为它需要第一列,'ORDERID' 而不是ORDERDATE Precise which column (aka key) 你想使用,你应该很高兴。

Motorcycles.groupby(pd.Grouper(key='ORDERDATE', freq='M'))
于 2021-03-14T13:57:23.007 回答