Dask应用groupby元更改索引列dtype

时间:2019-07-03 07:01:16

标签: python dataframe dask

我有以下次要示例:

df = pd.DataFrame({'col1': ['a', 'a', 'a', 'b', 'b'], 'col2': [80, 80, 443, 80,80], 'col3':['yes', 'no', 'yes', 'yes', 'no']})

dtypes是:

df.dtypes

col1    object
col2     int64
col3    object
dtype: object

和分组依据:

df.groupby(['col1', 'col2']).col3.apply(lambda series: 'yes' in series.values).reset_index().dtypes

col1    object
col2     int64
col3    object
dtype: object

但是,如果我使用了淡淡的数据框:

ddf = dd.from_pandas(df, npartitions=2)
ddf.dtypes

col1    object
col2     int64
col3    object
dtype: object

并使用meta进行分组:

meta = make_meta({'col3': '?'})

meta.index = pd.MultiIndex(levels=[[], []], codes=[[],[]], names=['col1', 'col2'])

ddf.groupby(['col1', 'col2']).col3.apply(lambda series: 'yes' in series.values, meta=meta).reset_index().dtypes

col1    object
col2    object
col3      bool
dtype: object

col2已更改为object。我应该以其他方式使用meta keword吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,方法是为该级别传递虚拟值,以便使dask能够提取必要的信息:

meta.index = pd.MultiIndex(levels=[['a'], [1]], codes=[[],[]], names=['col1', 'col2'])