ソートされたインデックスを維持しながら、daskでpivot_tableを使用しようとしています。私は次のような単純なパンダデータフレームを持っています:
# make dataframe, fist in pandas and then in dask
df = pd.DataFrame({'A':['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], 'B': ['a', 'b', 'c', 'a', 'b', 'c', 'a','b', 'c'], 'dist': [0, .1, .2, .1, 0, .3, .4, .1, 0]})
df.sort_values(by='A', inplace=True)
dd = dask.dataframe.from_pandas(df, chunksize=3) # just for demo's sake, you obviously don't ever want a chunksize of 3
print(dd.known_divisions) # Here I get True, which means my data is sorted
# now pivot and see if the index remains sorted
dd = dd.categorize('B')
pivot_dd = dd.pivot_table(index='A', columns='B', values='dist')
print(pivot_dd.known_divisions) # Here I get False, which makes me sad
並べ替えられたインデックスを持つようにpivot_ddを取得する方法を見つけたいのですが、daskにsort_index
メソッドが表示されず、キーエラーが発生しない限り「A」をインデックスとして設定できません(すでにインデックスです!) 。
このおもちゃの例では、最初にパンダのテーブルを回転させてから並べ替えることができます。私が考えている実際のアプリケーションでは、それができません。
ヘルプ/提案を事前に感謝します。
これはあなたが望んでいたものではないかもしれませんし、おそらく最良の答えでもないかもしれませんが、それはうまくいくようです。最初の問題は、pivot
操作によって列のカテゴリインデックスが作成されることです。これは煩わしいことです。次のことができます。
>>> pivot_dd = dd.pivot_table(index='A', columns='B', values='dist')
>>> pivot_dd.columns = list(pivot_dd.columns)
>>> pivot_dd = pivot_dd.reset_index().set_index('A', sorted=True)
>>> pivot_dd.known_divisions
True
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加