У нас есть фрейм данных «А» с 5 столбцами, и мы хотим добавить скользящее среднее значение для каждого столбца, который мы могли бы сделать:

A = pd.DataFrame(np.random.randint(100, size=(5, 5)))

for i in range(0,5):
A[i+6] = A[i].rolling(3).mean()

Однако, если «A» имеет столбец с именем «A», «B» ... «E»:

A = pd.DataFrame(np.random.randint(100, size=(5, 5)), columns = ['A', 'B', 
'C', 'D', 'E'])

Как мы можем аккуратно добавить 5 столбцов со скользящим средним, и каждое имя должно быть ['A_mean', 'B_mean', .... 'E_mean']?

1
Fed 19 Сен 2018 в 12:47

2 ответа

Лучший ответ

Попробуй это:

for col in df:
     A[col+'_mean'] = A[col].rolling(3).mean()

Вывод с вашего пути:

    0   1   2   3       4    6      7           8           9           10
0   16  53  9   16      67  NaN     NaN         NaN         NaN         NaN
1   55  37  93  92      21  NaN     NaN         NaN         NaN         NaN
2   10  5   93  99      27  27.0    31.666667   65.000000   69.000000   38.333333
3   94  32  81  91      34  53.0    24.666667   89.000000   94.000000   27.333333
4   37  46  20  18      10  47.0    27.666667   64.666667   69.333333   23.666667

И вывод с моим:

    A   B   C   D        E   A_mean B_mean        C_mean     D_mean  E_mean
0   16  53  9   16      67   NaN        NaN         NaN         NaN         NaN
1   55  37  93  92      21   NaN        NaN         NaN         NaN         NaN
2   10  5   93  99      27   27.0   31.666667   65.000000   69.000000   38.333333
3   94  32  81  91      34   53.0   24.666667   89.000000   94.000000   27.333333
4   37  46  20  18      10   47.0   27.666667   64.666667   69.333333   23.666667
3
Frayal 19 Сен 2018 в 10:01

Без петель:

pd.concat([A, A.apply(lambda x:x.rolling(3).mean()).rename(
    columns={col: str(col) + '_mean' for col in A})], axis=1)


    A   B   C   D   E     A_mean     B_mean  C_mean     D_mean     E_mean
0  67  54  85  61  62        NaN        NaN     NaN        NaN        NaN
1  44  53  30  80  58        NaN        NaN     NaN        NaN        NaN
2  10  59  14  39  12  40.333333  55.333333    43.0  60.000000  44.000000
3  47  25  58  93  38  33.666667  45.666667    34.0  70.666667  36.000000
4  73  80  30  51  77  43.333333  54.666667    34.0  61.000000  42.333333
1
hellpanderr 19 Сен 2018 в 12:12