Calculate mean in pandas with even and odd columns Calculate mean in pandas with even and odd columns pandas pandas

Calculate mean in pandas with even and odd columns


Create helper arange by length of columns with modulo and create new columns:

arr = np.arange(len(df.columns)) % 2df['avg_odd']  = df.iloc[:, arr == 0].mean(axis=1)df['avg_even'] = df.iloc[:, arr == 1].mean(axis=1)print (df)   col1  col2  col3  col4  col5  col6    avg_odd   avg_even0     1     7    56  16.0   1.0    13  19.333333  12.0000001     2    45    67   NaN   9.0     3  26.000000  24.0000002     3    12     8  25.0  23.0    53  11.333333  30.0000003     4    56    12   6.0  56.0    72  24.000000  44.6666674     5    14    39  19.0   NaN    88  22.000000  40.333333


Using % and groupby

df[['avg_odd', 'avg_even']] = df.groupby(np.arange(df.shape[1]) % 2, axis=1).mean()

   col1  col2  col3  col4  col5  col6   avg_even    avg_odd0     1     7    56  16.0   1.0    13  12.000000  19.3333331     2    45    67   NaN   9.0     3  24.000000  26.0000002     3    12     8  25.0  23.0    53  30.000000  11.3333333     4    56    12   6.0  56.0    72  44.666667  24.0000004     5    14    39  19.0   NaN    88  40.333333  22.000000


df = df.assign(avg_even = df[df.columns[::2]].mean(axis=1),               avg_odd = df[df.columns[1::2]].mean(axis=1))

Simple and direct