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

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -