如何在python中将具有相同值的两行合并为单行?

时间:2019-05-14 11:57:38

标签: python-3.x pandas date

我有一个名为“数据”的表,其值将如下所示,

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代码以获取预期的输出。

2 个答案:

答案 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')