如何根据之前的平均 X 行创建特征? [复制]
Posted
技术标签:
【中文标题】如何根据之前的平均 X 行创建特征? [复制]【英文标题】:How to create a feature based on an average of X rows before? [duplicate] 【发布时间】:2020-08-30 18:36:19 【问题描述】:我有一个包含多年数据和许多功能的数据框。
对于这些特征中的每一个,我想创建一个新特征来平均过去 12 周的数据。
假设我有每周数据。我想要一个 feature1B 的数据点给我来自 feature1A 的最后 12 行数据的平均值。如果数据是每小时的,我希望对最后 2016 行(24 小时 * 7 天 * 12 周)进行同样的处理
例如,假设数据如下所示:
Week Feature1
1 8846
2 2497
3 1987
4 5294
5 2487
6 1981
7 8973
8 9873
9 8345
10 5481
11 4381
12 8463
13 7318
14 8642
15 4181
16 3871
17 7919
18 2468
19 4981
20 9871
我需要代码循环遍历多个特征,创建一个特征名称,例如“TARGET.”+特征,并根据我的标准吐出平均数据(最后 12 行...最后 2016 行...取决于格式)。
Week Feature1 Feature1-B
1 8846
2 2497
3 1987
4 5294
5 2487
6 1981
7 8973
8 9873
9 8345
10 5481
11 4381
12 8463
13 7318 5717.333333
14 8642 5590
15 4181 6102.083333
16 3871 6284.916667
17 7919 6166.333333
18 2468 6619
19 4981 6659.583333
20 9871 6326.916667
感谢任何帮助。
【问题讨论】:
看起来你需要rolling
,即每周数据:df['Feature1-B'] = df['Feature1'].rolling(12).mean()
太棒了……我今天学到了一些新东西。谢谢!
这正是我要找的 Chris A。我现在已经整理好了。
【参考方案1】:
通过 Chris A 的有用评论解决了问题。似乎无法将该评论标记为答案。
import pandas as pd
df = pd.read_csv('data.csv')
cols = df.iloc[:,2:].columns
for c in cols:
df['12W_AVG.'+c] = df[c].rolling(2016).mean()
df['12W_AVG.'+c] = df['12W_AVG.'+c].fillna(df['12W_AVG.'+c][2015])
df['12W_AVG.'+c+'_LAL'] = df['12W_AVG.'+c]*0.9
df['12W_AVG.'+c+'_UAL'] = df['12W_AVG.'+c]*1.1
df.drop(c, axis=1, inplace=True)
【讨论】:
【参考方案2】:这对你有用吗?
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=["week", "data"], data=[
[1, 8846],
[2,2497],
[3,1987],
[4,5294],
[5,2487],
[6,1981],
[7,8973],
[8,9873],
[9,8345],
[10,5481],
[11,4381],
[12,8463],
[13,7318],
[14,8642],
[15,4181],
[16,3871],
[17,7919],
[18,2468],
[19,4981],
[20,9871]])
df.insert(2, "average",0, True)
for length in range(12, len(df.index)):
values = df.iloc[length-12:index, 1]
weekly_sum = np.sum(values, axis=0)
df.at[length, 'average'] = weekly_sum / 12
print(df)
请注意,这是非常糟糕的代码,需要您自己做一些工作
【讨论】:
以上是关于如何根据之前的平均 X 行创建特征? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 dplyr mutate 函数根据当前行有条件地创建新变量