【问题标题】:How to merge two rows having same values into single row in python?如何将具有相同值的两行合并为python中的单行?
【发布时间】:2019-05-14 11:57:38
【问题描述】:

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

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

【问题讨论】:

    标签: python-3.x pandas date


    【解决方案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')
    

    【讨论】:

    • 感谢您的帮助.. 但它没有用,.. 我收到以下错误:属性错误:'datetime.date' object has no attribute 'strip;..
    • 在发布的 df 上应用代码..然后请发布完整的 df,因为代码仅适用于上述情况..对于通用我需要更多数据
    • 我应该使用相同的逻辑而不分组 id 和 name ..?如果我只需要两个日期的差异..
    【解决方案2】:

    首先,您需要将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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多