【发布时间】:2019-09-15 10:42:19
【问题描述】:
我使用 Python dask 处理大型 csv 面板数据集 (15+GB),我需要执行 groupby(...).apply(...) 函数来删除每天每只股票的最后观察值。我的数据集看起来像
stock date time spread time_diff
VOD 01-01 9:05 0.01 0:07
VOD 01-01 9:12 0.03 0:52
VOD 01-01 10:04 0.02 0:11
VOD 01-01 10:15 0.01 0:10
VOD 01-01 10:25 0.03 0:39
VOD 01-01 11:04 0.02 22:00
VOD 01-02 9:04 0.02 0:05
... ... ... .... ...
BAT 01-01 13:05 0.04 10:02
BAT 01-02 9:07 0.05 0:03
BAT 01-02 9:10 0.06 0:04
... ... ... .... ...
如果数据框在 pandas 中,那么这可以通过
df_new=df_have.groupby(['stock','date'], as_index=False).apply(lambda x: x.iloc[:-1])
此代码适用于 pandas df。但是,我无法在 dask 数据框中执行此代码。我做了以下尝试。
ddf_new=ddf_have.groupby(['stock','date']).apply(lambda x: x.iloc[:-1]).compute()
或
ddf_new=ddf_have.groupby(['stock','date']).apply(lambda x: x.iloc[:-1], meta=('stock' : 'f8')).compute()
或
ddf_new=ddf_have.groupby(['stock','date']).apply(lambda x: x.iloc[:-1], meta=meta).compute()
不幸的是,它们都不起作用。谁能帮我为 dask dataframe 获取正确的代码?谢了
【问题讨论】:
-
如果你不运行
compute,你只是在创建一个图表。使用 dask 的黄金法则是,如果操作在 pandas 中运行,则无需切换到 dask。你介意生成mcve吗? -
@rpanai 谢谢。我添加了一个简单的示例。
-
关于性能:您的数据是否存储在单个
CSV文件中? -
@rpanai 是的......
标签: python pandas dataframe group-by dask