我正在寻找帮助计算两个或更多相同的代号细胞之间的天数。我需要的内容如下所示在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
我设法首先使用codename
和date
对数据进行排序
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
中找到相同的细胞,他们将第一个日期与其他日期进行比较我不确定。希望有人能提供帮助。
使用:
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
说明:
转换到日期时间和排序使用transform
与first
获取与原始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]