如何对 pandas 数据框中的多列执行分组并使用 python 中的 fbProphet 预测未来值?
How to perform group by on multiple columns in a pandas dataframe and predict future values using fbProphet in python?
我的数据框如下所示。我正在尝试根据 pandas
数据框中存在的日期和组 aggregate(sum)
我的金额列。我能够成功 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()
您遇到了一些问题。
数字
data
初始化的第 3 行应该传入 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
我们可能想知道二月或三月
一月后的特定天数,
而不是在该列中留下不透明的 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)
成功处理了数据的形状和类型后,
你现在应该可以让图书馆进一步分析它了。
我的数据框如下所示。我正在尝试根据 pandas
数据框中存在的日期和组 aggregate(sum)
我的金额列。我能够成功 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()
您遇到了一些问题。
数字
data
初始化的第 3 行应该传入 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
我们可能想知道二月或三月
一月后的特定天数,
而不是在该列中留下不透明的 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)
成功处理了数据的形状和类型后, 你现在应该可以让图书馆进一步分析它了。