亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以在多列上加快 groupby 速度,然后用 1 個句點進行 diff 嗎?

我可以在多列上加快 groupby 速度,然后用 1 個句點進行 diff 嗎?

夢里花落0921 2022-06-28 16:15:02
我有一個像這樣的DataFrame。df = pd.DataFrame({'a': np.random.randint(0, 3, 10**7),                     'b': np.random.randint(0, 4000, 10**7),                     'c': np.random.random(10**7)}我想按前兩列分組(無序,與我在此處提供的組數大致相同),然后區分第三列。df.groupby(['a', 'b']).c.diff(periods=-1)可悲的是,這對我來說很慢,但我想這是相當多的工作。>>> %timeit df.groupby(['a', 'b']).c.diff(periods=-1)     10.2 s ± 75.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)有什么辦法可以避免 Pandas groupby 加快速度嗎?我知道在 Pandas 中進行 groupby->reduce 時,通??梢杂眉?NumPy 替換,但我不確定這里是否有什么聰明的方法可以代替 groupby 操作。
查看完整描述

1 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

這確實是一個有趣的問題,因為我們通常只選擇groupby(),即使它相當昂貴。

這是另一種更快的方法:

  1. 排序方式['a','b']

  2. 計算差異,屏蔽每個塊中的最后一行NaN

和代碼:

s = df.sort_values(['a', 'b'])df['diff_c'] = (s['c'].diff(periods=-1)
                       .where(s.duplicated(['a','b'], keep='last'))
                )

在我的計算機上,您的代碼在 8.5 秒內運行,而上述代碼在 1.8 秒內運行。


查看完整回答
反對 回復 2022-06-28
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號