如何根据之前的平均 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 行创建特征? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分一列字符串,并从单独的元素创建行? [复制]

如何通过取行的平均值从数据集中创建 R 表? [复制]

如何为我的数据创建 SVM?

使用 dplyr mutate 函数根据当前行有条件地创建新变量

如何复制或删除bash中的特定行并将它们创建到新文件中[重复]

当必须根据条件对记录进行分组时如何选择最多 x 行