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