我正在寻求帮助,以计算两个或多个相同代号单元之间的天数。我需要的内容显示在下面的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
中的单元格相同时,我需要计算第一个日期与其他日期之间的天数。
我认为我需要使用熊猫Timedelta(date1 - date2).days
,但是我是如何在codename
中找到相同单元格的,它们将第一个日期与我不确定的其余日期进行比较。希望有人能帮忙。
答案 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转换为日期时间并进行排序,使用transform
和first
来获得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]