Pandas Dataframe:如何在每个agent有多个观测值的观测值和堆叠的agent之间取得差异

2024-10-02 22:35:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个个体和每个个体的多个观察值的熊猫数据框——下面数据框的前三列(Id、Date、Termination)。每个人的观察次数不是固定的。也就是说,有时有1个,有时有2个,有时有3个等等。数据按下面的顺序排列(即所有与个体有关的观察都放在一起,个体相互叠加)。你知道吗

我想建造第四纵队,持续时间。如果观察不是该个人的最后一次,则持续时间等于下一次观察的日期减去当前观察的日期。即,第一个值267=1/05/2010-7/08/2009,第二个值365=1/05/2011-1/05/2010。如果观察是该个人的最后一次,则持续时间等于终止日期减去该日期。也就是说,第三个值463=6/08/2012-1/05/2011。你知道吗

如何在python中实现这一点?抱歉,这里的python新手,我不知道用Google来开始这个。。。你知道吗

enter image description here

df = pd.DataFrame({
        'ID':['AE871161', 'AE871161', 'AE871161', 'AE871164', 'AE871164', 'AE871188', 'AE871188', 'AE871188'],
        'Date':['7/08/2009', '1/05/2010', '1/05/2011', '31/07/2010', '31/07/2011', '1/06/2009', '14/06/2010', '13/06/2011'],
        'Termination':['6/08/2012', '6/08/2012', '6/08/2012', '15/07/2012', '15/07/2012', '10/06/2012', '10/06/2012', '10/06/2012']
        })

Tags: 数据iddfdategoogle次数pd持续时间
1条回答
网友
1楼 · 发布于 2024-10-02 22:35:28

我认为您需要^{}替换为Termination列中每个组最后丢失的值,然后用^{}减去Date^{}最后将timedelta转换为天:

#convert both columns to datetimes if necessary
df[['Date','Termination']] = df[['Date','Termination']].apply(pd.to_datetime, dayfirst=True)

df['Duration'] = (df.groupby('ID')['Date'].shift(-1)
                    .fillna(df['Termination'])
                    .sub(df['Date'])
                    .dt.days)
print (df)
         ID       Date Termination  Duration
0  AE871161 2009-08-07  2012-08-06       267
1  AE871161 2010-05-01  2012-08-06       365
2  AE871161 2011-05-01  2012-08-06       463
3  AE871164 2010-07-31  2012-07-15       365
4  AE871164 2011-07-31  2012-07-15       350
5  AE871188 2009-06-01  2012-06-10       378
6  AE871188 2010-06-14  2012-06-10       364
7  AE871188 2011-06-13  2012-06-10       363

相关问题 更多 >