Is there a way to apply a list of functions to each column in a DataFrame like the DataFrameGroupBy.agg function does? I found an ugly way to do it like this:
df=pd.DataFrame(dict(one=np.random.uniform(0,10,100), two=np.random.uniform(0,10,100))) df.groupby(np.ones(len(df))).agg(['mean','std']) one two mean std mean std 1 4.802849 2.729528 5.487576 2.890371
For Pandas 0.20.0 or newer, use df.agg
(thanks to ayhan for pointing this out):
In [11]: df.agg(['mean', 'std']) Out[11]: one two mean 5.147471 4.964100 std 2.971106 2.753578
For older versions, you could use
In [61]: df.groupby(lambda idx: 0).agg(['mean','std']) Out[61]: one two mean std mean std 0 5.147471 2.971106 4.9641 2.753578
Another way would be:
In [68]: pd.DataFrame({col: [getattr(df[col], func)() for func in ('mean', 'std')] for col in df}, index=('mean', 'std')) Out[68]: one two mean 5.147471 4.964100 std 2.971106 2.753578
In the general case where you have arbitrary functions and column names, you could do this:
df.apply(lambda r: pd.Series({'mean': r.mean(), 'std': r.std()})).transpose() mean std one 5.366303 2.612738 two 4.858691 2.986567
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With