我正在研究一个名为dataframe
的{{1}},其中包含许多df
值(用作主变量)的浮动变量(balance
)的一年的每日信息。键)。我正在尝试通过匹配上个月的日期来创建新列account
,计算平均值并将其用作预期的未来值。我现在将详细解释:
数据集是在附加并解析多个json值后生成的,一旦完成处理,就可以得到:
expected_balance
每个帐户值都有365个值(获取信息的开始日期和信息年份),并按天重新采样。之后,我将这个数据帧分为训练和测试。火车包含所有最近的值,除了最近2个月的信息,测试是最近2个月(最后一个月不一定都是满月,如果最后/最大日期值为 date balance account day month year fdate
0 2018-04-13 470.57 SP014 13 4 2018 201804
1 2018-04-14 375.54 SP014 14 4 2018 201804
2 2018-04-15 375.54 SP014 15 4 2018 201804
3 2018-04-16 229.04 SP014 16 4 2018 201804
4 2018-04-17 216.62 SP014 17 4 2018 201804
... ... ... ... ... ... ... ...
414857 2019-02-24 381.26 KO012 24 2 2019 201902
414858 2019-02-25 181.26 KO012 25 2 2019 201902
414859 2019-02-26 160.82 KO012 26 2 2019 201902
414860 2019-02-27 0.82 KO012 27 2 2019 201902
414861 2019-02-28 109.50 KO012 28 2 2019 201902
,则20-04-2019
和train will be from 20-04-2018 to 31-03-2019
)。这就是我的管理方式:
test 01-03-2019 to 20-04-2019
我现在需要做的是为df_test_1 = df[df.fdate==df.groupby('account').fdate.transform('max')].copy()
dft = df.drop(df_test_1.index)
df_test_2 = dft[dft.fdate==dft.groupby('account').fdate.transform('max')].copy()
df_train = dft.drop(df_test_2.index)
df_test = pd.concat([df_test_2,df_test_1])
#print("Shape df: ",df.shape) #for validation purposes
#print("Shape test: ",df_test.shape) #for validation purposes
#print("Shape train: ",df_train.shape) #for validation purposes
中的每个日期创建一个新列exp_bal
(预期余额),该列是通过将特定日期的所有火车值取平均值而得出的(这是请求的方法因此,我必须按照说明进行操作。
这是一个预期输出/结果的示例,我仅打印过去2个 train 月份中特定日期的帐户AA001值(假设这些值始终重复其他8个月):
df_test
我应该能够使用此信息为每一天添加一个新列,该列是 date balance account day month year fdate
... ... ... ... ... ... ... ...
0 2019-03-20 200.00 AA000 20 3 2019 201903
1 2019-04-20 100.00 AA000 20 4 2019 201904
所有月份中同一天值的平均值
df_train
因此,我可以为该帐户的预测计算出一个毫秒。
首先,我使用它来遍历每个帐户:
date balance account day month year fdate exp_bal
0 2018-05-20 470.57 AA000 20 5 2018 201805 150.00
30 2019-06-20 381.26 AA000 20 6 2019 201906 150.00
此后,我迷失了如何使用ids = list(df['account'].unique())
for i in range(0,len(ids)):
dft_train = df_train[df_train['account'] == ids[i]]
dft_test = df_test[df_test['account'] == ids[i]]
first_date = min(dft_test['date'])
last_date = max(df_ttest['date'])
dft_train = dft_train.set_index('date')
dft_test = dft_train.set_index('date')
值创建给定日期的平均值,该平均值将附加到dft_train
的新列中。
我很感谢您的帮助或建议,也随时可以要求澄清/更多信息,我很乐意对此进行编辑。预先感谢!
答案 0 :(得分:1)
不确定这是否是您唯一遇到的问题,但这是如何计算火车数据的预期余额:
import pandas as pd, numpy as np
# make test data
n = 60
df = pd.DataFrame({'Date': np.tile(pd.date_range('2018-01-01',periods=n).values, 2), 'Account': np.repeat(['A', 'B'], n), 'Balance': range(2*n)})
df['Day'] = df.Date.dt.day
# calculate expected balance
df['exp_bal'] = df.groupby(['Account', 'Day']).Balance.transform('mean')
# example output for day 5
print(df[df.Day==5])
输出:
Date Account Balance Day exp_bal
4 2018-01-05 A 4 5 19.5
35 2018-02-05 A 35 5 19.5
64 2018-01-05 B 64 5 79.5
95 2018-02-05 B 95 5 79.5