gpt4 book ai didi

python - 如何使用 groupby 推断缺失值 - Python?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:35 25 4
gpt4 key购买 nike

我有以下数据集:

data = {
'date': ['1/1/2019', '1/2/2019', '1/3/2019', '1/4/2019', '1/1/2019', '1/2/2019', '1/3/2019', '1/4/2019'],
'account_id': [1, 1, 1, 1, 2, 2, 2, 2],
'value_1': [1, 2, 3, 4, 5, 6, 7, 8],
'value_2': [1, 3, 6, 9, 10, 12, 14, 16]
}
df = pd.DataFrame(data,index = data['date']).drop('date', 1)
df

我需要将值 1 和值 2 向前推算 30 天。

我遇到了Extrapolate Pandas DataFrame 。如果日期列中没有重复的条目,那么它会很好地工作。

我想过使用这种类型的东西,但我不明白如何将 v 添加到函数中:

def extrapolation(df):
extend = 1
y = pd.DataFrame(
data=df,
index=pd.date_range(
start=df.index[0],
periods=len(df.index) + extend
)
)
#then, the extrapolation piece


df_out=df.head(0).copy()
for k,v in df.groupby('account_id'):
df_out=pd.concat([df_out,extrapolation(df)])

最佳答案

您可以按如下方式修改链接的答案:

def extrapolate(df):
new_max = df.index.max() + pd.to_timedelta('30D')
dates = pd.date_range(df.index.min(), new_max, freq='D')
ret_df = df.reindex(dates)

x = np.arange(len(df))

# new x values
new_x = pd.Series(np.arange(len(ret_df)), index=dates)

for col in df.columns:
fit = np.polyfit(x, df[col], 1)

# tranform and fill
ret_df[col].fillna(fit[0]*new_x + fit[1], inplace=True)

return ret_df

然后应用:

ext_cols = ['value_1', 'value_2']

df.groupby('account_id')[ext_cols].apply(extrapolate)

您还可以指定每列的多项式阶数:

poly_orders = [1,2]
ext_cols = ['value_1', 'value_2']

def extrapolate(df):
new_max = df.index.max() + pd.to_timedelta('30D')
dates = pd.date_range(df.index.min(), new_max, freq='D')
ret_df = df.reindex(dates)

x = np.arange(len(df))

# new x values
new_x = pd.Series(np.arange(len(ret_df)), index=dates)

for col, o in zip(ext_cols, poly_orders):
fit = np.polyfit(x, df[col], o)

print(fit)

# tranform and fill
new_vals = pd.Series(0, index=dates)

for i in range(1,o+1):
new_vals = new_x**i * fit[o-i]

ret_df[col].fillna(new_vals, inplace=True)

return ret_df

并使用sklearn.linear_model.LinearRegression来更好地操作输入/输出,而不是numpy.polyfit

关于python - 如何使用 groupby 推断缺失值 - Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56548280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com