在某些条件下计算日期之间

时间:2019-03-01 09:43:58

标签: python pandas

我正在寻求帮助,以计算两个或多个相同代号单元之间的天数。我需要的内容显示在下面的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中的单元格相同时,我需要计算第一个日期与其他日期之间的天数。

我认为我需要使用熊猫Timedelta(date1 - date2).days,但是我是如何在codename中找到相同单元格的,它们将第一个日期与我不确定的其余日期进行比较。希望有人能帮忙。

1 个答案:

答案 0 :(得分: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

说明

Aftr转换为日期时间并进行排序,使用transformfirst来获得Series,其大小与原始DataFrame相同,因此可以减去,最后将timedelta转换为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]