415

dataframe200を超える列があります。問題は、それらが生成されたときの順序です

['Q1.3','Q6.1','Q1.2','Q1.1',......]

次のように列を並べ替える必要があります。

['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]

Python内でこれを行う方法はありますか?

4

11 に答える 11

532
df = df.reindex(sorted(df.columns), axis=1)

これは、列名を並べ替えると、必要な順序が得られることを前提としています。列名が辞書式に並べ替えられない場合 (たとえば、列 Q10.3 を Q9.1 の後に表示する場合)、別の方法で並べ替える必要がありますが、それは pandas とは関係ありません。

于 2012-06-16T21:12:21.780 に答える
405

より簡潔にすることもできます。

df.sort_index(axis=1)

結果を代入してください:

df = df.sort_index(axis=1)

または、インプレースで実行します。

df.sort_index(axis=1, inplace=True)
于 2012-07-08T18:56:47.510 に答える
53

あなたはただ行うことができます:

df[ソート済み(df.columns)]

編集:短いです

df[sorted(df)]
于 2014-06-24T21:22:45.420 に答える
25

いくつかの列の場合、列の順序を好きなように並べることができます。

#['A', 'B', 'C'] <-this is your columns order
df = df[['C', 'B', 'A']]

この例は、列のソートとスライスを示しています。

d = {'col1':[1, 2, 3], 'col2':[4, 5, 6], 'col3':[7, 8, 9], 'col4':[17, 18, 19]}
df = pandas.DataFrame(d)

あなたは得る:

col1  col2  col3  col4
 1     4     7    17
 2     5     8    18
 3     6     9    19

次に、次のようにします。

df = df[['col3', 'col2', 'col1']]

その結果:

col3  col2  col1
7     4     1
8     5     2
9     6     3     
于 2016-03-11T05:54:35.027 に答える
16

Wes の回答に「inplace=True」を追加するか、結果を新しい DataFrame に設定することを忘れないでください。

df.sort_index(axis=1, inplace=True)
于 2014-12-08T15:33:31.697 に答える
1

sortメソッドとsorted関数を使用すると、比較に使用されるキーを抽出するカスタム関数を提供できます。

>>> ls = ['Q1.3', 'Q6.1', 'Q1.2']
>>> sorted(ls, key=lambda x: float(x[1:]))
['Q1.2', 'Q1.3', 'Q6.1']
于 2012-06-16T21:14:20.077 に答える
-2
print df.sort_index(by='Frequency',ascending=False)

列に基づいてデータセットを並べ替える場合、by は列の名前です。

于 2015-06-20T19:58:40.727 に答える