为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只斗牛犬 2023-04-25 15:21:19
我有一个包含 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       
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

尝试:


df.groupby(df['time'] // 10)['score'].apply(lambda x: x.mode()[0])

输出:


time

8362    4

8363    5

8364    1

Name: score, dtype: int64


查看完整回答
反对 回复 2023-04-25
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

df['time'] = df['time'] / 1000

然后,按所需的列分组,在本例中为分数,然后指定您是按模式聚合的时间列。这可以使用以下代码完成:

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


查看完整回答
反对 回复 2023-04-25
?
万千封印

TA贡献1891条经验 获得超3个赞

两种方法:

  1. 使用resample,不过今天才知道,目前还没有尝试过,不过看起来很强大。 

  2. 我最喜欢的方法是:

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 可能会稍微快一些。重新采样可能比分组更快,但这很容易。


查看完整回答
反对 回复 2023-04-25
  • 3 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信