我有一个名为“数据”的表,其值将如下所示,
ID NAME DOB LOCATION
1 bob 08/10/1985 NEW JERSEY
1 bob 15/09/1987 NEW YORK
2 John 08/10/1985 NORTH CAROLINA
2 John 26/11/1990 OKLAHOMA
例如 我想要类似的输出,
ID NAME No.of.Days
1 bob difference of two given dates in days
2 John difference of two given dates in days
请帮助我形成python代码以获取预期的输出。
答案 0 :(得分:1)
如果给定ID的中只有两个日期,则下面的方法有效!
df.groupby(['ID','NAME'])['DOB'].apply(lambda x: abs(pd.to_datetime(list(x)[0]) - pd.to_datetime(list(x)[1]))).reset_index(name='No.Of.Days')
输出
ID NAME No.Of.Days
0 1 bob 766 days
1 2 John 1934 days
您也可以使用np.diff
df.groupby(['ID','NAME'])['DOB'].apply(lambda x: np.diff(list(x))[0]).reset_index(name='No.Of.Days')
答案 1 :(得分:1)
首先,您需要将Date
列转换为date
格式。假设您正在从.csv
进行读取,然后按如下所示读取.csv
文件
df = pd.read_csv('yourfile.csv', parse_dates = ['DOB'])
否则,将您现有的数据框列转换为date
格式,如下所示。
df['DOB'] = pd.to_datetime(df['DOB'])
现在,您可以执行常规的数字运算。
df.groupby(['ID','NAME'])['DOB'].apply(lambda x: abs(pd.to_datetime(list(x)[0]) - pd.to_datetime(list(x)[1]))).reset_index(name='No.Of.Days')