Панды: выполнять операции над различными столбцами и создавать, переименовывать новые столбцы - PullRequest
0 голосов
/ 19 сентября 2018

У нас есть фрейм данных «A» с 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 ']

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

без петель:

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
0 голосов
/ 19 сентября 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...