gpt4 book ai didi

python - Groupby 并移动一个 dask 数据框

转载 作者:行者123 更新时间:2023-12-04 12:19:34 25 4
gpt4 key购买 nike

我想使用 dask 2.14 扩展我在 Pandas 数据帧上执行的一些操作。
例如,我想对数据框的列应用移位:

import dask.dataframe as dd
data = dd.read_csv('some_file.csv')
data.set_index('column_A')
data['column_B'] = data.groupby(['column_A'])['column_B'].shift(-1)

但我得到 AttributeError: 'SeriesGroupBy' object has no attribute 'shift'我阅读了 dask 文档,我看到没有这样的方法(而在 Pandas 中有)

你能提出一些有效的替代方案吗?

谢谢

最佳答案

有一个open ticket关于这个在 GitHub 上。本质上,您必须使用 apply绕过它。我不确定这是否会影响 dask 的性能.还有一张票引用了这个问题,并指出它在 pandas 中。 ,但它已经开放了一段时间。

这应该等同于 pandas手术:

import dask.dataframe as dd
import pandas as pd
import random

df = pd.DataFrame({'a': list(range(10)),
'b': random.choices(['x', 'y'], k=10)})

print("####### PANDAS ######")
print("Initial df")
print(df.head(10))
print("................")

pandas_df = df.copy()
print("Final df")

pandas_df['a'] = pandas_df.groupby(['b'])['a'].apply(lambda x: x.shift(-1))

print(pandas_df.head(10))
print()


print("####### DASK ######")
print("Initial df")
dask_df = dd.from_pandas(df, npartitions=1).reset_index()
print(dask_df.head(10))
print("................")

dask_df['a'] = dask_df.groupby(['b'])['a'].apply(lambda x: x.shift(-1))

print("Final df")
print(dask_df.head(10))

我显然无法对 dask 中的方法进行基准测试因为似乎别无选择。但是,我可以在 pandas :
import string

import numpy as np
import pandas as pd


df = pd.DataFrame({'a': list(range(100000)),
'b': np.random.choice(list(string.ascii_lowercase), 100000)
})

def normal_way(df):
df = df.groupby(['b'])['a'].shift(-1)

def apply_way(df):
df = df.groupby(['b'])['a'].apply(lambda x: x.shift(-1))
timeit结果是:
%timeit normal_way(df)
4.25 ms ± 98 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit apply_way(df)
15 ms ± 446 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python - Groupby 并移动一个 dask 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61611718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com