2016-07-08 3 views
1

数値、日付値、およびテキスト値を含むpandas.DataFrameがあります。このような何か:パンダピボットを含む文字列をソートする

Strike StrikeCell          Expiration ExpirationCell         CellContents 
0 60.0 \n <div class="cell row-header strike itm" ... 2016-07-15 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="60.0" m... 
1 60.0 \n <div class="cell row-header strike itm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="60.0" m... 
2 60.0 \n <div class="cell row-header strike itm" ... 2018-01-19 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="60.0" 
13 70.0 \n <div class="cell row-header strike itm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="70.0" m... 
15 70.0 \n <div class="cell row-header strike itm" ... 2018-01-19 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="70.0" m... 
17 70.0 \n <div class="cell row-header strike itm" ... 2016-10-21 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="70.0" m... 
... 
562 260.0 \n <div class="cell row-header strike otm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="260.0" ... 
564 270.0 \n <div class="cell row-header strike otm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="270.0" ... 
565 280.0 \n <div class="cell row-header strike otm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="280.0" ... 

私の意図は、StrikeCell(昇順)最初の列ダウン、(昇順)列にわたってExpirationCellと、テーブル内の値としてCellContents持つことです。基本的には、HTML形式のコンテンツで大きなピボットテーブルを作成しています。

df.pivot(index='Strike', columns='Expiration', values='CellContents') 

Strikeが正しくソートされ、Expirationが正しくソートされています

私は正常に動作し、次の操作を行うことができます。私は文字列の内容StrikeCellを使用しようとExpirationCell場合

しかし、次のように:

df.pivot(index='StrikeCell', columns='ExpirationCell', values='CellContents') 

ソートが失われています。

そこで質問はcolumnsとしてindexExpirationcellとしてStrikeCellを使用している間StrikeExpirationで昇順ソートを回復する方法です。

pandas 0.18.1を使用してください。

+0

このテスト 'df'、それソート正しく使用の場合ので、それは、他のいくつかの問題について次のようになります。' DF = pd.DataFrame({ 'StrikeCell '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ['f'、 'e'、 'c'、 'd'、 'a'、 'b'] 'ExpirationCell' '、'、 'a'、 'b'])、 'CellContents':['a'、 'b'、 'c'、 'a'、 'a'、 'b']}) ' – jezrael

+0

テスト。誰でもデフォルトのソートを知っていますか? –

+0

わかりませんが、英数字をデフォルトのソートにすることができます。 – jezrael

答えて

1

私はこれがうまくいくと思います。

まず、ExpirationCellStrikeCellの注文を修正しましょう。

その後
StrikeCell_ordered = df[['Strike', 'StrikeCell']].sort_values(by='Strike')['StrikeCell'] 
ExpirationCell_ordered = df[['Expiration', 'ExpirationCell']].sort_values(by='Expiration')['ExpirationCell'] 

ピボットとreindexを適用します。

pivoted_df = df.pivot(index='StrikeCell', columns='ExpirationCell', values='CellContents') 
result = pivoted_df.reindex(index=StrikeCell_ordered, columns=ExpirationCell_ordered) 
+1

'drop_duplicates'メソッドを' StrikeCell_ordered'と 'ExpirationCell_ordered'に追加しなければなりません。そうでなければ重複する' StrikeCell'と 'ExpirationCell'をピボットしました。それがうまくいった。ありがとうございました! –

+0

@ strimp099そうですね、重複を忘れました。 – ptrj

関連する問題