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

我有一个包含 2 列的 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

我想将 df.time 协调到毫秒并按模式聚合 df.score。它应该是这样的:


         time  score

        8362      4

        8363      5

        8364      1

       


一只斗牛犬
浏览 121回答 3
3回答

天涯尽头无女友

尝试:df.groupby(df['time'] // 10)['score'].apply(lambda x: x.mode()[0])输出:time8362    48363    58364    1Name: score, dtype: int64

Smart猫小萌

首先,转换时间列,使其包含毫秒。1 微秒包含 0.001 毫秒。因此,此代码会将您的时间列转换为毫秒:df['time'] = df['time'] / 1000然后,按所需的列分组,在本例中为分数,然后指定您是按模式聚合的时间列。这可以使用以下代码完成:df.groupby(['score']).apply(pd.DataFrame.mode).reset_index(drop=True)

万千封印

两种方法:使用resample,不过今天才知道,目前还没有尝试过,不过看起来很强大。 我最喜欢的方法是:df["milliseconds"] = np.round(df["time"] / 1000, 0) # For cutoff, consider // 1000 df = df.groupby("milliseconds").agg(score=("score", "mode")).reset_index()如果时间紧迫,请考虑使用 .apply() 或列表理解进行毫秒计算。如果您使用 apply 执行此操作,请记住 lambda 函数有开销。对于非常大的样本,numpy 可能会稍微快一些。重新采样可能比分组更快,但这很容易。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python