DASK:GROUPBY与nlargest索引自动缩进,并且不允许reset_index()

问题描述 投票:1回答:1

我一直在试图通过从该question以下方法来获取一组nlargest行。这个问题的解决方案是正确的到一个点。

在这个例子中,我GROUPBY列A并希望返回CD的基础上B前两名值的行。

出于某种原因,grp_df的指数是多级,并且包括Addf的原始索引。

我希望能简单地reset_index()和删除不必要的指标,只是不停A,但我得到了以下错误:

ValueError: The columns in the computed data do not match the columns in the provided metadata

下面是一个简单的例子重现错误:

import numpy as np
import dask.dataframe as dd
import pandas as pd

np.random.seed(42)

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

ddf = dd.from_pandas(df, npartitions=3)

grp_df = ddf.groupby('A')[['B','C']].apply(lambda x: x.nlargest(2, columns=['B']), meta={
    "B": 'f8', "C": 'f8'})

# Print is successful and results are correct
print(grp_df.head())

grp_df = grp_df.reset_index()

# Print is unsuccessful and shows error below
print(grp_df.head())
grouping dask dask-distributed
1个回答
1
投票

为解决here发现的方法。

下面的代码现在允许reset_index()工作,摆脱了原来ddf指数。不过不知道为什么原来ddf指数通过在首位的GROUPBY来了,虽然

meta = pd.DataFrame(columns=['B', 'C'], dtype=int, index=pd.MultiIndex([[], []], [[], []], names=['A', None]))
grp_df = ddf.groupby('A')[['B','C']].apply(lambda x: x.nlargest(2, columns=['B']), meta=meta)

grp_df = grp_df.reset_index().drop('level_1', axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.