【发布时间】:2020-04-15 23:42:20
【问题描述】:
我正在尝试使用 Dask,但是在分组后使用 apply 时遇到了问题。
我有一个包含大量行的 Dask DataFrame。让我们考虑以下示例
N=10000
df = pd.DataFrame({'col_1':np.random.random(N), 'col_2': np.random.random(N) })
ddf = dd.from_pandas(df, npartitions=8)
我想合并col_1 的值,并遵循here 的解决方案
bins = np.linspace(0,1,11)
labels = list(range(len(bins)-1))
ddf2 = ddf.map_partitions(test_f, 'col_1',bins,labels)
在哪里
def test_f(df,col,bins,labels):
return df.assign(bin_num = pd.cut(df[col],bins,labels=labels))
这正如我所期望的那样工作。
现在我想取每个 bin 中的中值(取自 here)
median = ddf2.groupby('bin_num')['col_1'].apply(pd.Series.median).compute()
有 10 个 bin,我希望 median 有 10 行,但它实际上有 80 行。数据框有 8 个分区,所以我猜想以某种方式应用正在单独处理每个分区。
但是,如果我想要平均值并使用mean
median = ddf2.groupby('bin_num')['col_1'].mean().compute()
它可以工作,输出有 10 行。
那么问题是:我做错了什么导致apply 无法以mean 的身份运行?
【问题讨论】:
标签: python-3.x pandas dask