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