猿问

Python - 锚定日期的日期差异

我试图找到我的锚定日期和按 ID 分组的其他日期之间的日期差异。


输入


ID  Date        Anchor Date

123 1/5/2018    N

123 4/10/2018   N

123 5/8/2018    Y

123 10/12/2018  N

234 1/4/2018    N

234 1/4/2018    N

234 1/4/2018    Y

456 5/6/2018    N

456 5/6/2018    N

456 5/10/2018   N

456 6/1/2018    Y

567 3/2/2018    N

567 3/2/2018    N

567 3/2/2018    Y

预期输出:


ID  Date        Anchor Date Diff

123 1/5/2018    N           -123         

123 4/10/2018   N           -28

123 5/8/2018    Y            0

123 10/12/2018  N            157

234 1/4/2018    N            0

234 1/4/2018    N            0

234 1/4/2018    Y            0

456 5/6/2018    N           -26

456 5/6/2018    N           -26

456 5/10/2018   N           -22

456 6/1/2018    Y            0

567 3/2/2018    N            0

567 3/2/2018    N            0

567 3/2/2018    Y            0

代码尝试


import pandas as pd

df = pd.read_csv()

df['Date'] = df.groupby('ID')['Date'].apply(lambda x: x.sort_values())

df['diff'] = df.groupby('ID')['Date'].diff() / np.timedelta64(1, 'D')

df['diff'] = df['diff'].fillna(0)

我收到的错误是“插入列的索引与框架索引不兼容”。其次,我不确定如何合并锚定日期列以确保将其用于时间零。


www说
浏览 137回答 1
1回答

狐的传说

首先你需要转换Date成datetime类型:df['Date'] = pd.to_datetime(df['Date'])之后,可以提取Anchor Datewith的索引idxmax,然后用于loc提取实际日期:idx = df['Anchor Date'].eq('Y').groupby(df['ID']).transform('idxmax')df['Diff'] = (df['Date'] - df.loc[idx, 'Date'].values) / np.timedelta64(1, 'D')另一种方法是使用布尔索引提取那些日期,然后映射:anchor_dates = df.loc[df['Anchor Date']=='Y', ['ID','Date']].set_index('ID')['Date']df['Diff'] = (df['Date'] - anchor_dates)/np.timedelta64(1, 'D')输出:     ID       Date Anchor Date   Diff0   123 2018-01-05           N -123.01   123 2018-04-10           N  -28.02   123 2018-05-08           Y    0.03   123 2018-10-12           N  157.04   234 2018-01-04           N    0.05   234 2018-01-04           N    0.06   234 2018-01-04           Y    0.07   456 2018-05-06           N  -26.08   456 2018-05-06           N  -26.09   456 2018-05-10           N  -22.010  456 2018-06-01           Y    0.011  567 2018-03-02           N    0.012  567 2018-03-02           N    0.013  567 2018-03-02           Y    0.0
随时随地看视频慕课网APP

相关分类

Python
我要回答