Панды: выполнять операции над различными столбцами и создавать, переименовывать новые столбцы

1

У нас есть dataframe '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 ']?

Теги:
pandas

2 ответа

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
  • 0
    Спасибо, Алексис. Знаете ли вы, как Pandas «понимает» автоматически: 1. что мы хотим перебирать каждый столбец; 2. если бы мы использовали A [col] = A [col] .rolling (3) .mean (), это перезаписало бы столбцы средними значениями, в то время как, если мы подали в суд на A [col + '_ string'], стоит ли добавлять новые столбцы?
  • 0
    честно говоря, я не очень хорошо объяснил, почему они так поступили. Я только знаю, что при вызове этого вы получите доступ только к заголовку, а не к данным, и это то, что вы хотите. Я действительно не могу сказать тебе больше, потому что я не знаю больше.
1

Без петель:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню