在一定条件下计算日期间

2024-06-16 13:45:34 发布

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

我要计算两个或多个相同代号单元格之间的天数。我需要的是在daysBetween列中显示的:

codename    date         daysBetween
AAA         20-oct-2011  NaN
AAB         20-oct-2011  NaN    
AAB         21-oct-2011  1
AAB         29-oct-2011  9
AAB         21-oct-2012  365

以下是我的原始数据:

codename    date         daysBetween
AAB         21-oct-2011  NaN
AAO         20-oct-2011  NaN
AAB         21-oct-2012  NaN
AAB         20-oct-2011  NaN     
AAB         29-0ct-2011  NaN

我首先使用codenamedate对数据进行排序

file.sort_values(by=['codename', 'date'])

结果:

codename    date         daysBetween
AAA         20-oct-2011  NaN
AAB         20-oct-2011  NaN    
AAB         21-oct-2011  NaN
AAB         29-0ct-2011  NaN
AAB         21-oct-2012  NaN

我的问题来了,当codename中的单元格相同时,我需要计算第一个日期与其他日期之间的天数

我想我需要使用pandas Timedelta(date1 - date2).days,但确切地说,我是如何在codename中找到相同的单元格的,我不确定它们是如何将第一个日期与其他日期进行比较的


Tags: 数据原始数据date排序nansortoctfile
1条回答
网友
1楼 · 发布于 2024-06-16 13:45:34

用途:

df['date'] = pd.to_datetime(df['date'])

df = df.sort_values(by=['codename', 'date'])

df['new'] = (df['date'] - df.groupby('codename')['date'].transform('first')).dt.days
print (df)
  codename       date  daysBetween  new
0      AAA 2011-10-20          NaN    0
1      AAB 2011-10-20          NaN    0
2      AAB 2011-10-21          1.0    1
3      AAB 2011-10-29          9.0    9
4      AAB 2012-10-21        365.0  367

解释:

转换为datetimes和排序后,使用^{}^{}作为get Series,大小与原始数据帧相同,因此可以将最后一次转换的timedelta减去^{}

细节

print (df.groupby('codename')['date'].transform('first'))
0   2011-10-20
1   2011-10-20
2   2011-10-20
3   2011-10-20
4   2011-10-20
Name: date, dtype: datetime64[ns]

相关问题 更多 >