2016-08-02 1 views
4

2つの列が生成され、連結されています。同じ列の行を維持しながら並べ替えることができます。D元の順序:列を別の列の値でグループ化して整列します。

In [120]: df_list[0] 
Out[120]: 

    A   B   C   D 
0 0.564678 0.598355 0.606693 MA0835 
1 0.066291 0.063587 0.662292 MA0835 
2 0.000000 0.000000 0.010758 MA0835 
3 0.000000 0.000000 0.097895 MA0835 
4 0.000000 0.000000 0.136468 MA0835 

In [121]: df_list[1] 
Out[121]: 

    A   B   C   D 
0 0.628844 0.614492 0.570333 MA1002 
1 0.317790 0.293189 0.239368 MA1002 
2 0.000000 0.000000 0.000000 MA1002 
3 0.000000 0.000000 0.000000 MA1002 
4 0.000000 0.000000 0.000000 MA1002 

In [122]: df = pd.concat(df_list[0:2]) 

In [122]: df 
Out[122]: 
    A   B   C   D 
0 0.564678 0.598355 0.606693 MA0835 
1 0.066291 0.063587 0.662292 MA0835 
2 0.000000 0.000000 0.010758 MA0835 
3 0.000000 0.000000 0.097895 MA0835 
4 0.000000 0.000000 0.136468 MA0835 
0 0.628844 0.614492 0.570333 MA1002 
1 0.317790 0.293189 0.239368 MA1002 
2 0.000000 0.000000 0.000000 MA1002 
3 0.000000 0.000000 0.000000 MA1002 
4 0.000000 0.000000 0.000000 MA1002 

標準ソートが生成:

In [125]: df.sort_values('A',ascending=False) 
Out[125]: 
    A   B   C   D 
0 0.628844 0.614492 0.570333 MA1002 
0 0.564678 0.598355 0.606693 MA0835 
1 0.317790 0.293189 0.239368 MA1002 
1 0.066291 0.063587 0.662292 MA0835 
2 0.000000 0.000000 0.010758 MA0835 
3 0.000000 0.000000 0.097895 MA0835 
4 0.000000 0.000000 0.136468 MA0835 
2 0.000000 0.000000 0.000000 MA1002 
3 0.000000 0.000000 0.000000 MA1002 
4 0.000000 0.000000 0.000000 MA1002 

をしかし、私は、AにソートしDによって指定された行のグループを維持したいと思います。これは、所望の出力です:

A   B   C   D 
0 0.628844 0.614492 0.570333 MA1002 
1 0.317790 0.293189 0.239368 MA1002 
2 0.000000 0.000000 0.000000 MA1002 
3 0.000000 0.000000 0.000000 MA1002 
4 0.000000 0.000000 0.000000 MA1002 
0 0.564678 0.598355 0.606693 MA0835 
1 0.066291 0.063587 0.662292 MA0835 
2 0.000000 0.000000 0.010758 MA0835 
3 0.000000 0.000000 0.097895 MA0835 
4 0.000000 0.000000 0.136468 MA0835 

は私がgroupbyで作業する必要がありますか、または私はに慣れていないよ別の並べ替え/グループ化の技術がありますか?

+0

keys引数を使用するか、順序がアルファベット順だった場合、それは許容範囲でしょうか? – Grr

+0

各 'D 'に関連付けられた5つの行は、各' D'のインデックスが示すように、同じ順序で保持する必要があります。 – AGS

+0

私のせいで、私は明確ではありませんでした。 'D'の各行グループの順序は関係ありますか?例えば、MA0835のグループがMA1002のグループの前に来た場合、それは容認できるでしょうか? – Grr

答えて

2

は「D」の絶対的な順序が重要であるpd.concat

keys = [(df.A.iloc[0], i) for i, df in enumerate(list_of_dfs)] 
pd.concat(list_of_dfs, keys=keys) \ 
    .sort_index(ascending=[False, True, True]) \ 
    .reset_index(drop=True) 

enter image description here

+0

これは私を近づけます。私は十分にはっきりしていませんでした。結局、Dの各ブロックの順序は重要ではありません.df全体が各インデックスのA値でソートされていれば0 – AGS

+0

@AGSの回答がありましたupdated – piRSquared

+0

'df.A.iloc [0]'に同じ値がある場合を除いて、新しい答えがうまくいきます。 'InvalidIndexError:一意にインデックス付けされたインデックスオブジェクトでのみ有効です。 ' – AGS

関連する問題