python 2.7 - Pandas column sort order -
i using rolling().agg , adding columns dataframe.
def add_mean_std_cols(df): res = df.rolling(5).agg(['mean','std']) res.columns = res.columns.map('_'.join) final = res.join(df).sort_index(axis=1) return final np.random.seed(20) df = pd.dataframe(np.random.randint(0,9,size=(10, 6)), columns=list('abcdef')) print print df print df.columns = ['a', 'a/b','ab', 'ac', 'c/b', 'd'] print add_mean_std_cols(df)
the issue output column name order:
a/b a/b_mean a/b_std ab ab_mean ab_std ac ac_mean ac_std a_mean a_std c/b c/b_mean c/b_std d d_mean d_std 0 3 4 nan nan 6 nan nan 7 nan nan nan nan 2 nan nan 0 nan nan 1 6 8 nan nan 5 nan nan 3 nan nan nan nan 0 nan nan 6 nan nan 2 6 0 nan nan 5 nan nan 7 nan nan nan nan 5 nan nan 2 nan nan 3 6 3 nan nan 3 nan nan 0 nan nan nan nan 6 nan nan 2 nan nan 4 3 1 3.2 3.114482 8 5.4 1.816590 0 3.4 3.507136 4.8 1.643168 2 3.0 2.449490 7 3.4 2.966479 5 6 6 3.6 3.361547 8 5.8 2.167948 2 2.4 2.880972 5.4 1.341641 1 2.8 2.588436 3 4.0 2.345208 6 2 6 3.2 2.774887 4 5.6 2.302173 6 3.0 3.316625 4.6 1.949359 4 3.6 2.073644 8 4.4 2.880972 7 6 2 3.6 2.302173 3 5.2 2.588436 1 1.8 2.489980 4.6 1.949359 5 3.6 2.073644 2 4.4 2.880972 8 1 8 4.6 2.966479 2 5.0 2.828427 4 2.6 2.408319 3.6 2.302173 4 3.2 1.643168 8 5.6 2.880972 9 6 0 4.4 3.286335 3 4.0 2.345208 4 3.4 1.949359 4.2 2.489980 0 2.8 2.167948 5 5.2 2.774887
for reason sorting a/b , ab before a_mean a_std.
the order prefer is:
a a_mean a_std ...
from playing seems '_' sorted last.
any suggestions on how achieve desired order?
thanks!
in [60]: res = df.rolling(5).agg(['mean','std']) in [61]: res.columns = res.columns.map('_'.join) in [62]: cols = np.concatenate(list(zip(df.columns, res.columns[0::2], res.columns[1::2]))) in [63]: res.join(df).loc[:, cols] out[63]: a_mean a_std a/b a/b_mean a/b_std ab ab_mean ab_std ac ac_mean ac_std c/b c/b_mean c/b_std d d_mean \ 0 3 nan nan 4 nan nan 6 nan nan 7 nan nan 2 nan nan 0 nan 1 6 nan nan 8 nan nan 5 nan nan 3 nan nan 0 nan nan 6 nan 2 6 nan nan 0 nan nan 5 nan nan 7 nan nan 5 nan nan 2 nan 3 6 nan nan 3 nan nan 3 nan nan 0 nan nan 6 nan nan 2 nan 4 3 4.8 1.643168 1 3.2 3.114482 8 5.4 1.816590 0 3.4 3.507136 2 3.0 2.449490 7 3.4 5 6 5.4 1.341641 6 3.6 3.361547 8 5.8 2.167948 2 2.4 2.880972 1 2.8 2.588436 3 4.0 6 2 4.6 1.949359 6 3.2 2.774887 4 5.6 2.302173 6 3.0 3.316625 4 3.6 2.073644 8 4.4 7 6 4.6 1.949359 2 3.6 2.302173 3 5.2 2.588436 1 1.8 2.489980 5 3.6 2.073644 2 4.4 8 1 3.6 2.302173 8 4.6 2.966479 2 5.0 2.828427 4 2.6 2.408319 4 3.2 1.643168 8 5.6 9 6 4.2 2.489980 0 4.4 3.286335 3 4.0 2.345208 4 3.4 1.949359 0 2.8 2.167948 5 5.2 d_std 0 nan 1 nan 2 nan 3 nan 4 2.966479 5 2.345208 6 2.880972 7 2.880972 8 2.880972 9 2.774887
Comments
Post a Comment