首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字典构造Panda键,其中DataFrame = SKU,但是值是日期和其他字段

从字典构造Panda键,其中DataFrame = SKU,但是值是日期和其他字段
EN

Stack Overflow用户
提问于 2020-02-05 00:29:52
回答 1查看 116关注 0票数 0

我是Python的新手,所以请耐心听我说。

我正在尝试将我认为可能是嵌套字典的内容转换为我可以导出的csv。下面是我的代码:

代码语言:javascript
运行
复制
import pandas as pd
import os 
from fbprophet import Prophet

# Read in File
df1 = pd.read_csv('File_Path.csv')

#Create Loop to Forecast Multiple SKUs
def get_prediction(df):
    prediction = {}
    df1 = df.rename(columns={'Date': 'ds','qty_ordered': 'y', 'item_no': 'item'})
    list_items = df1.item.unique()

    for item in list_items:
        item_df = df1.loc[df1['item'] == item]
        # set the uncertainty interval to 95% (the Prophet default is 80%)
        my_model = Prophet(yearly_seasonality= True, seasonality_prior_scale=1.0)
        my_model.fit(item_df)
        future_dates = my_model.make_future_dataframe(periods=12, freq='M')
        forecast = my_model.predict(future_dates)
        prediction[item] = forecast
    return prediction

# Save predictions to dictionary
df2 = get_prediction(df1)

# Convert dictionary
df3 = pd.DataFrame.from_dict(df3, index='columns)

所以代码的最后一部分就是我在努力的地方。我需要将df2字典转换为数据帧(df3),以便可以将其导出为csv。但是它看起来像是一个嵌套的字典?不确定是否需要更新我的函数。

这是字典中的一小段代码

我需要导出它,这样它看起来就像这样

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2020-02-05 03:35:04

首先,我们尝试制作一个可重现的示例:

数据和导入

代码语言:javascript
运行
复制
from fbprophet import Prophet
import numpy as np
import pandas as pd


df = pd.util.testing\
       .makeTimeDataFrame()\
       .reset_index()\
       .rename(columns={"index":"Date"})


df = pd.melt(df,
             id_vars=["Date"],
             var_name="item_no",
             value_vars=df.columns[1:],
             value_name="qty_ordered")

使用你的函数

这里我刚刚清理了一点你的代码

代码语言:javascript
运行
复制
# This returns a dict
def get_prediction(df):
    prediction = {}
    df = df.rename(columns={'Date': 'ds','qty_ordered': 'y', 'item_no': 'item'})
    list_items = df.item.unique()

    for item in list_items:
        item_df = df.loc[df['item'] == item]
        # set the uncertainty interval to 95% (the Prophet default is 80%)
        model = Prophet(yearly_seasonality= True, seasonality_prior_scale=1.0)
        model.fit(item_df)
        future_dates = model.make_future_dataframe(periods=12, freq='M')
        forecast = model.predict(future_dates)
        prediction[item] = forecast

    return prediction

df1 = get_prediction(df)

# From dictionary to df
df2 = []
for k,v in df1.items():
    v.insert(1, "item", [k]*len(v))
    df2.append(v)

df2 = pd.concat(df2, ignore_index=True)

输出预测df

如果你稍微修改一下你的函数,你可能会得到一个dataframe作为输出:

代码语言:javascript
运行
复制
def get_prediction_pandas(df):
    prediction = []
    df = df.rename(columns={'Date': 'ds','qty_ordered': 'y', 'item_no': 'item'})
    list_items = df.item.unique()

    for item in list_items:
        item_df = df.loc[df['item'] == item]
        # set the uncertainty interval to 95% (the Prophet default is 80%)
        model = Prophet(yearly_seasonality= True, seasonality_prior_scale=1.0)
        model.fit(item_df)
        future_dates = model.make_future_dataframe(periods=12, freq='M')
        forecast = model.predict(future_dates)
        forecast.insert(1, "item_no", [item]*len(forecast))
        prediction.append(forecast)
    prediction = pd.concat(prediction, ignore_index=True)
    return prediction

# this is a dataframe
df1 = get_prediction_pandas(df)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60061710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档