質問: ### 前提・実現したいこと python2の環境です。 対象となるdataframeですが、 indexは1行で定義されていて、 columnsは、YYYYMMDD-hhmmssで定義された複数の列が存在しています サンプルイメージとしては以下になります。 | | 20180501-122352 | 20180602-093050 | 20180523-105043 | | --- | --- | --- | --- | | case1 | [1,2,3] | [4,5,6] | [7,8,9] | 今やりたいことは columnsの文字列のうち、時間部分(hhmmss)でソートし、columnsを入れ替えたいのです。 完成形は以下です。 | | 20180602-093050 | 20180523-105043 | 20180501-122352 | | --- | --- | --- | --- | | case1 | [4,5,6] | [7,8,9] | [1,2,3] | ### 試したこと まず、columnsの文字列の先頭から9~14文字(つまり時間部分)を取り出し、 元のcolumnsの文字列とセットにして新たにlistを作成しました。 ``` (x[9:15], x) for x in columns ``` このlistの時間文字列でソートし、columnsだけ取り出しました。 取り出したcolumnsの順番を最初のdataframeに適用したいと思ったのですが、 方法が見つからず困っています。 何か別の方法もあると思っていますが、わからないので質問させていただきたいです。 よろしくお願いします。
回答: `df = df.ix[:,[ソートした列名のリスト]]`で列の並び替えができます。 参考:pandasのデータフレームの列を入れ替える ``` import pandas as pd df = pd.DataFrame({'20180501-122352':[[1,2,3]],'20180602-093050':[[4,5,6]],'20180523-105043':[[7,8,9]]}) print(df) cols = df.columns.tolist() cols = sorted( cols, key=lambda c: c[9:15]) # hhmmssでソート print(cols) df = df.ix[:,cols] # DataFrame列の並び替え print(df) ```