我有一個包含 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

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
首先,轉換時間列,使其包含毫秒。1 微秒包含 0.001 毫秒。因此,此代碼會將您的時間列轉換為毫秒:
df['time'] = df['time'] / 1000
然后,按所需的列分組,在本例中為分數,然后指定您是按模式聚合的時間列。這可以使用以下代碼完成:
df.groupby(['score']).apply(pd.DataFrame.mode).reset_index(drop=True)

萬千封印
TA貢獻1891條經驗 獲得超3個贊
兩種方法:
使用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 可能會稍微快一些。重新采樣可能比分組更快,但這很容易。
添加回答
舉報
0/150
提交
取消