我正在尝试为这个测试示例在 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/