我有一个在不使用meta参数的情况下为我工作的groupby。它输出我想要的但我想添加列名并获取数据帧而不是系列作为输出。
我试图运行以下代码:
jmin = client.persist(j1.loc[:10000])
import pandas as pd
import numpy as np
def unique(d):
return len(d.loc[:,['id']].drop_duplicates())
meta=pd.DataFrame(columns=['ids_per_mac'])
meta.ids_per_mac.astype(np.int64)
uu = client.persist(jmin.groupby(jmin['mac_address']).apply(unique,meta=meta))
执行失败:
任何想法为什么这个groupby适用不起作用vs没有meta的版本?
uu = client.persist(jmin.groupby(jmin['mac_address']).apply(unique))
答案 0 :(得分:4)
添加meta=
告诉dask.dataframe它应该从你的函数中得到什么。这是一种对dask.dataframe保持礼貌的方式,以便它可以继续懒惰地运行,而无需调用代码来确定函数返回的内容。
不幸的是,它不是一种自动转换数据的方法。您仍然必须依赖普通的Pandas API。
您可以考虑使用.to_frame()
方法将系列转换为数据框。
您可能也知道,但调用groupby.apply比使用groupby.nunique
或groupby.aggregate
等内置缩减要慢得多。