ここに私のdfがあります:
Net Upper Lower Mid Zsore
Answer option
More than once a day 0% 0.22% -0.12% 2 65
Once a day 0% 0.32% -0.19% 3 45
Several times a week 2% 2.45% 1.10% 4 78
Once a week 1% 1.63% -0.40% 6 65
名前( "Mid")で列をテーブルの先頭、インデックス0に移動するにはどうすればよいですか。これは次のように見える必要があります。
Mid Upper Lower Net Zsore
Answer option
More than once a day 2 0.22% -0.12% 0% 65
Once a day 3 0.32% -0.19% 0% 45
Several times a week 4 2.45% 1.10% 2% 78
Once a week 6 1.63% -0.40% 1% 65
私の現在のコードは、「df.columns.tolist()」を介してインデックスで列を移動しますが、名前でシフトしたいと思います。
リストを渡すことで、ix
を使用して並べ替えることができます。
In [27]:
# get a list of columns
cols = list(df)
# move the column to head of list using index, pop and insert
cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[27]:
['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
In [28]:
# use ix to reorder
df = df.ix[:, cols]
df
Out[28]:
Mid Net Upper Lower Zsore
Answer_option
More_than_once_a_day 2 0% 0.22% -0.12% 65
Once_a_day 3 0% 0.32% -0.19% 45
Several_times_a_week 4 2% 2.45% 1.10% 78
Once_a_week 6 1% 1.63% -0.40% 65
もう1つの方法は、列への参照を取得し、先頭に再挿入することです。
In [39]:
mid = df['Mid']
df.drop(labels=['Mid'], axis=1,inplace = True)
df.insert(0, 'Mid', mid)
df
Out[39]:
Mid Net Upper Lower Zsore
Answer_option
More_than_once_a_day 2 0% 0.22% -0.12% 65
Once_a_day 3 0% 0.32% -0.19% 45
Several_times_a_week 4 2% 2.45% 1.10% 78
Once_a_week 6 1% 1.63% -0.40% 65
loc
を使用してix
をpandas from 0.20.0
以降:
df = df.loc[:, cols]
パンダではdf.reindex()関数を使用できます。 dfは
_ Net Upper Lower Mid Zsore
Answer option
More than once a day 0% 0.22% -0.12% 2 65
Once a day 0% 0.32% -0.19% 3 45
Several times a week 2% 2.45% 1.10% 4 78
Once a week 1% 1.63% -0.40% 6 65
_
列名のリストを定義する
_cols = df.columns.tolist()
cols
Out[13]: ['Net', 'Upper', 'Lower', 'Mid', 'Zsore']
_
列名を好きな場所に移動します
_cols.insert(0, cols.pop(cols.index('Mid')))
cols
Out[16]: ['Mid', 'Net', 'Upper', 'Lower', 'Zsore']
_
次に、df.reindex()
関数を使用して並べ替えます
_df = df.reindex(columns= cols)
_
出力は:df
_ Mid Upper Lower Net Zsore
Answer option
More than once a day 2 0.22% -0.12% 0% 65
Once a day 3 0.32% -0.19% 0% 45
Several times a week 4 2.45% 1.10% 2% 78
Once a week 6 1.63% -0.40% 1% 65
_
他のソリューションで他のすべての列を明示的に指定する方法が気に入らなかったので、これが私にとって最適に機能しました。大きなデータフレームでは遅いかもしれませんが...?
df = df.set_index('Mid').reset_index()
たぶん私は何かを見逃していますが、これらの答えの多くは過度に複雑に思えます。単一のリスト内で列を設定することができるはずです:
前の列:
df = df[ ['Mid'] + [ col for col in df.columns if col != 'Mid' ] ]
または、代わりに、それを後ろに移動したい場合:
df = df[ [ col for col in df.columns if col != 'Mid' ] + ['Mid'] ]
または、複数の列を移動する場合:
cols_to_move = ['Mid', 'Zsore']
df = df[ cols_to_move + [ col for col in df.columns if col not in cols_to_move ] ]
これは、列の位置を再配置するために頻繁に使用する一般的なコードのセットです。役に立つかもしれません。
cols = df.columns.tolist()
n = int(cols.index('Mid'))
cols = [cols[n]] + cols[:n] + cols[n+1:]
df = df[cols]
データフレームの行の順序を変更するには、次のリストを使用します。
df = df[['Mid', 'Net', 'Upper', 'Lower', 'Zsore']]
これにより、後でコードを読むときに何が行われたかが非常に明確になります。また使用する:
df.columns
Out[1]: Index(['Net', 'Upper', 'Lower', 'Mid', 'Zsore'], dtype='object')
次に、カットアンドペーストして並べ替えます。