在某些条件下计算日期

问题描述 投票:1回答:1

我正在寻找帮助计算两个或更多相同的代号细胞之间的天数。我需要的内容如下所示在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中找到相同的细胞,他们将第一个日期与其他日期进行比较我不确定。希望有人能提供帮助。

python pandas
1个回答
0
投票

使用:

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

说明:

转换到日期时间和排序使用transformfirst获取与原始DataFrame相同大小的Series,因此可以减去,最后转换timedeltas到days

详情:

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]
© www.soinside.com 2019 - 2024. All rights reserved.