Python 如何将一列中的微秒转换为毫秒,并将另一列的聚合模式转换为毫秒

Python 如何将一列中的微秒转换为毫秒,并将另一列的聚合模式转换为毫秒,python,pandas,Python,Pandas,我有一个有两列的df。一个是以微秒为单位的时间戳,另一个是值。看起来是这样的: time score 83620 4 83621 4 83622 4 83623 4 83624 4 83625 4 83626 4 83627 4 83628 4

我有一个有两列的df。一个是以微秒为单位的时间戳,另一个是值。看起来是这样的:

         time  score
        83620      4
        83621      4
        83622      4
        83623      4
        83624      4
        83625      4
        83626      4
        83627      4
        83628      4
        83629      4
        83630      4
        83631      4
        83632      4
        83633      5
        83634      5
        83635      5
        83636      5
        83637      5
        83638      5
        83639      6
        83640      1
        83641      1
        83642      4
         time  score
        8362      4
        8363      5
        8364      1
       
我想将df.time调整为毫秒,并按模式聚合df.score。应该是这样的:

         time  score
        83620      4
        83621      4
        83622      4
        83623      4
        83624      4
        83625      4
        83626      4
        83627      4
        83628      4
        83629      4
        83630      4
        83631      4
        83632      4
        83633      5
        83634      5
        83635      5
        83636      5
        83637      5
        83638      5
        83639      6
        83640      1
        83641      1
        83642      4
         time  score
        8362      4
        8363      5
        8364      1
       
尝试:

输出:

time
8362    4
8363    5
8364    1
Name: score, dtype: int64
两种方法:

  • 使用重采样,但我今天才了解它,到目前为止还没有尝试过,但它看起来很强大。

  • 我最喜欢的方法是:

  • 如果时间紧迫,请考虑用Apple()或列表理解进行毫秒计算。如果使用apply,请记住lambda函数有开销。 对于非常大的样本,numpy可能会稍微快一点。


    重采样可能比分组快,但这很容易。

    首先,转换时间列,使其包含毫秒。1微秒包含0.001毫秒。因此,此代码将时间列转换为毫秒:

    df['time'] = df['time'] / 1000
    
    然后,按所需列分组,在本例中为score,然后指定按模式聚合时间列。这可以使用以下代码完成:

    df.groupby(['score']).apply(pd.DataFrame.mode).reset_index(drop=True)
    

    将micro转换为mili意味着删除三位数,而不是一位数。除以/1000