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

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

Python Pandas:在 df 列中使用“標志值”創建連續的 id 值并將其顯示在另一列中

Python Pandas:在 df 列中使用“標志值”創建連續的 id 值并將其顯示在另一列中

冉冉說 2021-10-26 18:31:53
我有一個非常大的數據框(20.000.000+ 行),其中包含一個名為“序列”的列?!靶蛄小绷惺歉鶕靡恍l件語句的時間序列計算得出的。值“2”標記序列的開始,值“3”標記序列的結束,值“1”標記序列內的數據點,值“4”標記需要忽略的數據點。(注意:標志值不一定必須是 1、2、3、4)我想要實現的是一個連續的 ID 值(寫在一個單獨的列中 - 請參閱下面示例中的“desired_Id_Output”),它以獨特的方式標記 2 - 3 的序列切片(序列的長度可變,范圍從2 [僅開始+結束] 到 5000 多個數據點),以便能夠對各個序列進行進一步的分組計算。index  sequence    desired_Id_Output    0          2                  1                   1          1                  1                   2          1                  1                   3          1                  1                   4          1                  1                   5          3                  1                   6          2                  2                   7          1                  2                   8          1                  2                   9          3                  2                   10         4                  NaN                   11         4                  NaN                   12         2                  3                   13         3                  3                   提前致謝,BR!
查看完整描述

2 回答

?
九州編程

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

計算序列開始是否有效?然后只需設置忽略值(標志4)。像這樣:


sequence_starts = df.sequence == 2

sequence_ignore = df.sequence == 4

sequence_id = sequence_starts.cumsum()

sequence_id[sequence_ignore] = numpy.nan


查看完整回答
反對 回復 2021-10-26
?
肥皂起泡泡

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

我想不出比循環遍歷整個事物的“愚蠢”解決方案更好的方法,例如:


import numpy as np    


counter = 0

tmp = np.empty_like(df['sequence'].values, dtype=np.float)


for i in range(len(tmp)):

    if df['sequence'][i] == 4:

        tmp[i] = np.nan

    else:

        if df['sequence'][i] == 2:

            counter += 1

        tmp[i] = counter

df['desired_Id_output'] = tmp

當然,這對于 20M 大小的 DataFrame 來說會很慢。改進這一點的一種方法是通過使用numba以下命令進行實時編譯:


import numba


@numba.njit

def foo(sequence):

    # put in appropriate modification of the above code block

    return tmp

并用參數調用它df['sequence'].values。


查看完整回答
反對 回復 2021-10-26
  • 2 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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