我的数据框如下所示。我正在尝试根据aggregate(sum)
数据框中显示的日期和组来pandas
我的金额列。我能够成功aggregate
专栏。但是,我不确定如何传递fbprophet来根据分组日期和分组来预测将来的值。以下是聚合代码。
注意:我是python的初学者,请提供解释和代码。
数据框
import pandas as pd
data = {'Date':['2017-01-01', '2017-01-01','2017-01-01','2017-01-01','2017-01-01','2017-01-01','2017-01-01','2017-01-01',
'2017-02-01', '2017-02-01','2017-02-01','2017-02-01','2017-02-01','2017-02-01','2017-02-01','2017-02-01'],'Group':['A','A','B','B','C','C','D','D','A','A','B','B','C','C','D','D'],
'Amount':['12.1','13.2','15.1','10.7','12.9','9.0','5.6','6.7','4.3','2.3','4.0','5.6','7.8','2.3','5.6','8.9']}
df = pd.DataFrame(data)
到目前为止,代码已尝试:
grouped = df.groupby(['Group','Date'])[['Amount']].sum()
答案 0 :(得分:1)
您遇到了一些问题。
data
初始化的第三行应该传入float
,而不是str
。
消除引号。
或者,可以解决此问题:
'Amount':[float(n) for n in ['12.1','13.2','15.1','10.7','12.9','9.0','5.6','6.7','4.3','2.3','4.0','5.6','7.8','2.3','5.6','8.9']]}
我们这样做是因为您真的不希望.sum()
合并为12.1和13.2
并提出'12.113.2'
。
您更喜欢25.3
。
您计算出的grouped
对象看起来很不错,
但是如果您检查.dtypes
属性,则会看到
它仅向Facebook先知提供Amount
列。
要解决此问题,请使用.reset_index()
:
>>> grouped.reset_index(inplace=True)
>>> grouped.dtypes
Group object
Date object
Amount float64
dtype: object
但是现在我们在药膏中看到了最后一只苍蝇。
具有不透明类别的'A'
或'B'
很好,
但对于Date
,我们可能想知道2月或3月
一月之后的某几天
而不是在该列中保留不透明的str
标签。
当我们提供data
输入时,我们可能已经完成了类型转换,
但也可以在此阶段对其进行清理:
import datetime as dt
def to_timestamp(day: str):
return dt.datetime.strptime(day, '%Y-%m-%d')
grouped['Date'] = grouped.Date.apply(to_timestamp)
成功调整了数据的形状和类型, 您现在应该处于可以让图书馆进一步分析的位置。