代码之家  ›  专栏  ›  技术社区  ›  jssm

大熊猫数据帧中几个时间戳序列的差异如何处理?

  •  1
  • jssm  · 技术社区  · 8 年前

    我想获得一个数据帧中几个时间戳列之间的时间差间隔。此外,有几个条目是NaN。

    原始df:

           0     1     2     3     4     5 
    0    date1 date2  NaN   NaN   NaN   NaN
    1    date3 date4 date5 date6 date7 date8
    

    期望输出:

              0           1           2           3           4
    0    date2-date1     NaN         NaN         NaN         NaN
    1    date4-date3 date5-date4 date6-date5 date7-date6 date8-date7
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   jezrael    8 年前

    我想你可以连续使用 NaN s到行尾:

    df = pd.DataFrame([['2015-01-02','2015-01-03', np.nan, np.nan],
                       ['2015-01-02','2015-01-05','2015-01-07','2015-01-12']])
    print (df)
                0           1           2           3
    0  2015-01-02  2015-01-03         NaN         NaN
    1  2015-01-02  2015-01-05  2015-01-07  2015-01-12
    
    df = df.apply(pd.to_datetime).ffill(axis=1).diff(axis=1)
    print (df)
        0      1      2      3
    0 NaT 1 days 0 days 0 days
    1 NaT 3 days 2 days 5 days
    

    细节 :

    首先将所有列转换为日期时间:

    print (df.apply(pd.to_datetime))
               0          1          2          3
    0 2015-01-02 2015-01-03        NaT        NaT
    1 2015-01-02 2015-01-05 2015-01-07 2015-01-12
    

    更换 每行前向填充最后一个值:

    print (df.apply(pd.to_datetime).ffill(axis=1))
               0          1          2          3
    0 2015-01-02 2015-01-03 2015-01-03 2015-01-03
    1 2015-01-02 2015-01-05 2015-01-07 2015-01-12
    

    获得差异 diff :

    print (df.apply(pd.to_datetime).ffill(axis=1).diff(axis=1))
        0      1      2      3
    0 NaT 1 days 0 days 0 days
    1 NaT 3 days 2 days 5 days