28
>>> df =DataFrame({'a':[1,2,3,4],'b':[2,4,6,8]})
>>> df['x']=df.a + df.b
>>> df['y']=df.a - df.b
>>> df
   a  b   x  y
0  1  2   3 -1
1  2  4   6 -2
2  3  6   9 -3
3  4  8  12 -4

ここで、列シーケンスを再配置します。これにより、「x」、「y」列が次のように1番目と2番目の列になります。

>>> df = df[['x','y','a','b']]
>>> df
    x  y  a  b
0   3 -1  1  2
1   6 -2  2  4
2   9 -3  3  6
3  12 -4  4  8

しかし、私が長い列'a'、'b'、'c'、'd' .....を持っていて、列を明示的にリストしたくない場合。どうやってやるの ?

またはパンダはset_column_sequence(dataframe,col_name, seq)私ができるようにのような機能を提供しますか: set_column_sequence(df,'x',0)そしてset_column_sequence(df,'y',1)

4

6 に答える 6

47

次のようなこともできます。

df = df[['x', 'y', 'a', 'b']]

次のコマンドで列のリストを取得できます。

cols = list(df.columns.values)

出力は次のようになります。

['a', 'b', 'x', 'y']

...これは、最初の関数にドロップする前に手動で簡単に再配置できます

于 2014-05-19T15:32:06.533 に答える
11

エレガントな組み込み関数があるかもしれません(しかし、私はまだそれを見つけていません)。あなたは1つを書くことができます:

# reorder columns
def set_column_sequence(dataframe, seq, front=True):
    '''Takes a dataframe and a subsequence of its columns,
       returns dataframe with seq as first columns if "front" is True,
       and seq as last columns if "front" is False.
    '''
    cols = seq[:] # copy so we don't mutate seq
    for x in dataframe.columns:
        if x not in cols:
            if front: #we want "seq" to be in the front
                #so append current column to the end of the list
                cols.append(x)
            else:
                #we want "seq" to be last, so insert this
                #column in the front of the new column list
                #"cols" we are building:
                cols.insert(0, x)
return dataframe[cols]

あなたの例の場合:set_column_sequence(df, ['x','y'])目的の出力を返します。

DataFrameの最後にseqが必要な場合は、代わりに「front=False」を渡します。

于 2012-09-08T10:41:23.073 に答える
6

次のことができます。

df =DataFrame({'a':[1,2,3,4],'b':[2,4,6,8]})

df['x']=df.a + df.b
df['y']=df.a - df.b

この方法で、任意の順序で列タイトルを作成します。

column_titles = ['x','y','a','b']

df.reindex(columns=column_titles)

これにより、目的の出力が得られます

于 2017-11-20T14:53:03.193 に答える
3
def _col_seq_set(df, col_list, seq_list):
    ''' set dataframe 'df' col_list's sequence by seq_list '''
    col_not_in_col_list = [x for x in list(df.columns) if x not in col_list]
    for i in range(len(col_list)):
        col_not_in_col_list.insert(seq_list[i], col_list[i])

    return df[col_not_in_col_list]
DataFrame.col_seq_set = _col_seq_set
于 2013-03-27T11:49:35.467 に答える
1

dropおそらく(列を削除するために)使用して言っていることを実行insertし、ある位置に列を挿入する関数を作成することをお勧めします。説明していることを実行するための既存のAPI関数はありません。

于 2012-09-08T20:41:11.897 に答える
0

重要な場合は、インデックスからリストを減算しても元のインデックスの順序が保持されないため、このソリューションは無視してかまいません。

In [61]: df.reindex(columns=pd.Index(['x', 'y']).append(df.columns - ['x', 'y']))
Out[61]: 
    x  y  a  b
0   3 -1  1  2
1   6 -2  2  4
2   9 -3  3  6
3  12 -4  4  8
于 2012-09-08T23:58:58.870 に答える