我有以下次要示例:
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吗?
答案 0 :(得分:0)
我找到了一个解决方案,方法是为该级别传递虚拟值,以便使dask能够提取必要的信息:
meta.index = pd.MultiIndex(levels=[['a'], [1]], codes=[[],[]], names=['col1', 'col2'])