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

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

查找先前出現的元素的索引的矢量化方法

查找先前出現的元素的索引的矢量化方法

侃侃爾雅 2022-08-16 09:46:32
假設我有這個熊貓系列:num = pd.Series([1,2,3,4,5,6,5,6,4,2,1,3])我想做的是得到一個數字,比如說5,并返回之前發生的索引。因此,如果我使用元素 5,我應該得到 4,因為該元素出現在索引 4 和 6 中?,F在我想為該系列的所有元素執行此操作,并且可以使用for循環輕松完成:for idx,x in enumerate(num):        idx_prev = num[num == x].idxmax()        if(idx_prev < idx):                return idx_prev但是,由于循環,此過程對于較長的串聯長度消耗了太多時間。有沒有辦法以矢量化的形式實現同樣的事情?輸出應如下所示:[NaN,NaN,NaN,NaN,NaN,NaN,4,5,3,1,0,2]
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您可以使用 來移動索引:groupby


num.index.to_series().groupby(num).shift()

輸出:


0     NaN

1     NaN

2     NaN

3     NaN

4     NaN

5     NaN

6     4.0

7     5.0

8     3.0

9     1.0

10    0.0

11    2.0

dtype: float64


查看完整回答
反對 回復 2022-08-16
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

可以在 中繼續工作。numpy

相當于使用是:[num[num == x].idxmax() for idx,x in enumerate(num)]numpy

_, out = np.unique(num.values, return_inverse=True)

哪個分配

array([0, 1, 2, 3, 4, 5, 4, 5, 3, 1, 0, 2], dtype=int64)

自。現在,您可以將 的壞值分配給 s,如下所示:outoutNan

out_series = pd.Series(out)
out_series[out >= np.arange(len(out))] = np.nan


查看完整回答
反對 回復 2022-08-16
  • 2 回答
  • 0 關注
  • 78 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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