1

我的数据框如下所示。我正在尝试根据数据框中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()
4

1 回答 1

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属性,您会发现它仅Amount向 facebook 先知提供该列。要解决这个问题,请使用.reset_index()

>>> grouped.reset_index(inplace=True)
>>> grouped.dtypes
Group     object
Date      object
Amount   float64
dtype: object

但现在我们看到了最后一个美中不足的地方。

日期

具有'A'or'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)

成功解决了数据的形状和类型之后,您现在应该可以让图书馆进一步分析它了。

于 2019-04-28T15:48:33.267 回答