首頁 > 後端開發 > Python教學 > 如何在不使用回調函數的情況下有效地向分組的 Pandas DataFrame 添加順序計數器列?

如何在不使用回調函數的情況下有效地向分組的 Pandas DataFrame 添加順序計數器列?

Linda Hamilton
發布: 2025-01-01 02:12:16
原創
938 人瀏覽過

How to Efficiently Add a Sequential Counter Column to Grouped Pandas DataFrames Without Using a Callback Function?

在沒有回調的情況下向分組DataFrame 添加順序計數器列

當嘗試向DataFrame 內的組添加順序計數器列時,回調函數可能不是最有效的方法。考慮以下DataFrame:

df = pd.DataFrame(
    columns="index c1 c2 v1".split(),
    data=[
            [0,  "A",  "X",    3, ],
            [1,  "A",  "X",    5, ],
            [2,  "A",  "Y",    7, ],
            [3,  "A",  "Y",    1, ],
            [4,  "B",  "X",    3, ],
            [5,  "B",  "X",    1, ],
            [6,  "B",  "X",    3, ],
            [7,  "B",  "Y",    1, ],
            [8,  "C",  "X",    7, ],
            [9,  "C",  "Y",    4, ],
            [10,  "C",  "Y",    1, ],
            [11,  "C",  "Y",    6, ],]).set_index("index", drop=True)
登入後複製

目標是建立一個新欄位“seq”,其中包含每個群組的連續數字,從而產生以下輸出:

   c1 c2  v1  seq
0   A  X   3    1
1   A  X   5    2
2   A  Y   7    1
3   A  Y   1    2
4   B  X   3    1
5   B  X   1    2
6   B  X   3    3
7   B  Y   1    1
8   C  X   7    1
9   C  Y   4    1
10  C  Y   1    2
11  C  Y   6    3
登入後複製

避免回呼函數:

我們可以利用cumcount()而不是使用回調函數方法更有效地實現相同的結果。 cumcount() 計算群組中每個唯一值出現的次數,並傳回包含累積計數的 pandas Series。

df["seq"] = df.groupby(['c1', 'c2']).cumcount() + 1
登入後複製
登入後複製

這種方法直接修改 DataFrame,避免了回呼函數的開銷。

自訂起始編號:

如果您希望排序從1 開始您可以將結果加1,而不是0:

df["seq"] = df.groupby(['c1', 'c2']).cumcount() + 1
登入後複製
登入後複製

透過利用cumcount() 方法,我們簡化了向分組資料幀添加順序計數器列的過程,從而提高了可讀性和效能。

以上是如何在不使用回調函數的情況下有效地向分組的 Pandas DataFrame 添加順序計數器列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板