for col in df:
df[col] = df[col].sum()
or a slower solution that does not use a loop ...
df = pd.DataFrame([df.sum()] * len(df))
Delay
@jezrael . for. , , , , , @ayhan, :
from string import ascii_letters
df = pd.DataFrame(np.random.randn(10000, 52), columns=list(ascii_letters))
%timeit df.sum()
1000 loops, best of 3: 1.47 ms per loop
%%timeit
for col in df:
df[col] = df[col].sum()
100 loops, best of 3: 21.3 ms per loop
%timeit df2 = pd.DataFrame([df.sum()] * len(df))
1 loops, best of 3: 270 ms per loop
%timeit df.stack().groupby(level=1).transform('sum').unstack()
10 loops, best of 3: 159 ms per loop
%timeit (pd.DataFrame(np.tile(df.sum().values, (len(df.index),1)), columns=df.columns, index=df.index))
100 loops, best of 3: 2.32 ms per loop
%%timeit
df2 = pd.DataFrame(df.sum().values[np.newaxis,:].repeat(len(df.index), axis=0),
columns=df.columns,
index=df.index)
100 loops, best of 3: 2.3 ms per loop
%time df.values[:] = df.values.sum(0)
CPU times: user 1.54 ms, sys: 485 µs, total: 2.02 ms
Wall time: 1.36 ms