python - Dask groupby apply 行为异常

标签 python pandas dask

我正在尝试为这个测试示例在 dask 中运行 groupby apply

import pandas as pd
import dask.dataframe as dd
tdf = pd.DataFrame({'a': [1, 2, 3, 4, 5, 6, 7, 8, 9],
               'b': [4, 5, 6, 3, 2, 1, 0, 0, 0]},
              index=[0, 1, 3, 5, 6, 8, 9, 9, 9])
ddf = dd.from_pandas(tdf, npartitions=3)

def func(df):
    df['b'] = df.b - df.b.mean()
    return df

meta = tdf.groupby('a').apply(func)
rddf = ddf.groupby('a').apply(func,meta=tmeta).compute()

我在 Windows 上的 jupyter notebook anaconda python_version = 3.6 中执行此代码,出现错误 'ValueError: cannot reindex from a duplicate axis' 并重复执行代码的 rddf 部分,我得到了

a   b
6   5   0.0
9   9   0.0
0   1   0.0
1   2   0.0
8   6   0.0
9   7   0.0
9   8   0.0
3   3   0.0
5   4   0.0

为什么会这样,同样的代码,不同的结果?

最佳答案

使用 df.copy() 能够得到预期的结果,但仍然不知道是什么导致了问题

import pandas as pd
import dask.dataframe as dd
import dask
tdf = pd.DataFrame({'a': [1, 2, 3, 4, 5, 6, 7, 8, 9],
               'b': [4, 5, 6, 3, 2, 1, 0, 0, 0]},
              index=[0, 1, 3, 5, 6, 8, 9, 9, 9])
ddf = dd.from_pandas(tdf, npartitions=3)
def func(df):
   df = df.copy()
   df['b'] = df.b - df.b.mean()
   return df
meta = tdf.groupby('a').apply(func)
rddf = ddf.groupby('a').apply(func,meta=meta).compute()

元是

        a   b
a           
1   0   1   0.0
2   1   2   0.0
3   3   3   0.0
4   5   4   0.0
5   6   5   0.0
6   8   6   0.0
7   9   7   0.0
8   9   8   0.0
9   9   9   0.0

rddf 是

       a    b
a           
5   6   5   0.0
9   9   9   0.0
1   0   1   0.0
2   1   2   0.0
6   8   6   0.0
7   9   7   0.0
8   9   8   0.0
3   3   3   0.0
4   5   4   0.0

关于python - Dask groupby apply 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295677/

相关文章:

python - Windows 10 上使用 python PyUSB 进行简单 USB 通信

python - 组合具有相同列值的 pandas DataFrame 的最有效方法

Dask Distributed - 相同的持久数据多个客户端

python - 使用 Dask 读取文件列表

python - Dask 将 JSON 嵌套到数据帧

python - 错误: ModuleNotFoundError: No module named 'termios'

python - 如何访问 azureml FileDataSet 中的文件(图像)?

python - 当字典被覆盖时如何修复类变量/常量?

python - 使用 ipywidgets 按钮返回 DataFrame

python - 将 GMT 时间戳转换为 Pandas 中的时间戳