在沒有回調的情況下向分組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中文網其他相關文章!