Daskを使用してgroupBy集計を行った後、指定された列から一意の項目数を取得できるかどうかを知りたいと思います。私はこのようなことはドキュメントには見当たりません。これはパンダのデータフレームで利用でき、本当に便利です。私はこれに関連するいくつかの問題を見てきましたが、実装されているかどうかはわかりません。Dask:Dataframe groupByのヌニークメソッド
誰かに私にこのことについてのヒントを教えてもらえますか?
Daskを使用してgroupBy集計を行った後、指定された列から一意の項目数を取得できるかどうかを知りたいと思います。私はこのようなことはドキュメントには見当たりません。これはパンダのデータフレームで利用でき、本当に便利です。私はこれに関連するいくつかの問題を見てきましたが、実装されているかどうかはわかりません。Dask:Dataframe groupByのヌニークメソッド
誰かに私にこのことについてのヒントを教えてもらえますか?
参照:
あなたは多分AGGのnunique外を行うことができますように見えるソースコードから。
dask groupbyにnuniqueを実装するには、集約関数を使用する必要があります。
import pandas as pd
import dask.dataframe as dd
def chunk(s):
'''
The function applied to the
individual partition (map)
'''
return s.apply(lambda x: list(set(x)))
def agg(s):
'''
The function whic will aggrgate
the result from all the partitions(reduce)
'''
s = s._selected_obj
return s.groupby(level=list(range(s.index.nlevels))).sum()
def finalize(s):
'''
The optional functional that will be
applied to the result of the agg_tu functions
'''
return s.apply(lambda x: len(set(x)))
tunique = dd.Aggregation('tunique', chunk, agg,finalize)
df = pd.DataFrame({
'col': [0, 0, 1, 1, 2, 3, 3] * 10,
'g0': ['a', 'a', 'b', 'a', 'b', 'b', 'a'] * 10,
})
ddf = dd.from_pandas(df, npartitions=10)
res = ddf.groupby(['col']).agg({'g0': tunique}).compute()
print(res)
@mdurantねえ、それが正しい方法であるか、より効率的なやり方があるかどうかを確認できますか、ありがとう –