Pandas Dask数据帧:为Grouppy中的日期差异定义元

Pandas Dask数据帧:为Grouppy中的日期差异定义元,pandas,datetime,pandas-groupby,dask,Pandas,Datetime,Pandas Groupby,Dask,我正试图为客户找到相互购买时间(即订单之间的天数)。虽然我的代码在没有定义meta的情况下工作正常,但我希望它能正常工作,不再看到要求我提供meta的警告 另外,如果您能就如何使用map或map\u分区而不是apply提出建议,我将不胜感激 到目前为止,我已经尝试: meta={'days\'u自上次订单日期:'datetime64[ns]} meta={'days\'u自上次订单日期:'f8'} meta={'ORDER\u DATE\u DT':'datetime64[ns]','date

我正试图为客户找到相互购买时间(即订单之间的天数)。虽然我的代码在没有定义
meta
的情况下工作正常,但我希望它能正常工作,不再看到要求我提供
meta
的警告

另外,如果您能就如何使用
map
map\u分区
而不是
apply
提出建议,我将不胜感激

到目前为止,我已经尝试:

  • meta={'days\'u自上次订单日期:'datetime64[ns]}

  • meta={'days\'u自上次订单日期:'f8'}

  • meta={'ORDER\u DATE\u DT':'datetime64[ns]','datetime64[ns]','datetime64[ns]}

  • meta={'ORDER\u DATE\u DT':'f8','days\u自上次订单日期起:'f8'}

  • meta=(“自上次订单以来的天数”,“f8”)

  • meta=(“自上次订单以来的天数”,“日期时间64[ns]”)

这是我的密码:

import numpy as np
import pandas as pd
import datetime as dt
import dask.dataframe as dd
from dask.distributed import wait, Client

client = Client(processes=True)

start = pd.to_datetime('2015-01-01')
end = pd.to_datetime('2018-01-01')
d = (end - start).days + 1

np.random.seed(0)
df = pd.DataFrame()
df['CUSTOMER_ID'] = np.random.randint(1, 4, 10)
df['ORDER_DATE_DT'] = start + pd.to_timedelta(np.random.randint(1, d, 10), unit='d')
print(df.sort_values(['CUSTOMER_ID','ORDER_DATE_DT']))
print(df)

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

# setting ORDER_DATE_DT as index to sort by date
ddf = ddf.set_index('ORDER_DATE_DT')
ddf = client.persist(ddf)
wait(ddf)

ddf = ddf.reset_index()
grp = ddf.groupby('CUSTOMER_ID')[['ORDER_DATE_DT']].apply(
    lambda df: df.assign(days_since_last_order=df.ORDER_DATE_DT.diff(1))
    # meta=????
)

# for some reason, I'm unable to print grp unless I reset_index()
grp = grp.reset_index()
print(grp.compute())
这是
df.sort\u值(['CUSTOMER\u ID','ORDER\u DATE\u DT')的打印输出。

这是
grp.compute()


我可能不会因为它有点长就深入讨论这个问题,但我想你会想知道,这激发了这个补丁的灵感,帮助更全面地解决了这个问题。我可能不会因为它有点长就深入讨论这个问题,但我想你会想知道,这激发了这个补丁来帮助解决更普遍的问题。