此任務涉及創建一個順序計數器,每當特定列中的值更改時重置一個順序計數器。 在Python中實現這一目標的最有效方法利用了pandas
>庫的力量。 PANDA提供的矢量化操作比通過行迭代要快得多。
這是您可以做到的:
<code class="python">import pandas as pd # Sample data data = {'col1': ['A', 'A', 'B', 'B', 'B', 'C', 'A', 'A', 'D']} df = pd.DataFrame(data) # Efficiently assign sequential numbers df['col2'] = (df['col1'] != df['col1'].shift()).cumsum() print(df)</code>
>此代碼首先使用df['col1'].shift()
來創建'col1'列的滯後版本。 將此滯後版本與原始列(df['col1'] != df['col1'].shift()
)進行比較,標識了值在哪裡變化。 然後,方法累計總和布爾值結果,有效地創建了一個順序計數器,僅在遇到新值時才增加。 This assigns a unique consecutive number to each group of identical values in 'col1', storing the result in a new column named 'col2'..cumsum()
<code class="python">import pandas as pd data = {'col1': ['A', 'A', 'B', 'B', 'B', 'C', 'A', 'A', 'D']} df = pd.DataFrame(data) df['group_id'] = (df['col1'] != df['col1'].shift()).cumsum() df['sequential_id'] = df.groupby('group_id').cumcount() + 1 df['final_id'] = df['col1'] + '_' + df['sequential_id'].astype(str) print(df)</code>此增強的代碼首先使用與以前相同的方法來標識組。 然後,在每個組中生成一個順序計數器。 我們添加了1個以從1而不是0開始。最後,我們將“ Col1”的原始值與順序ID相連,以在“ Final_id”中創建一個更有信息的唯一標識符。 由於pandas的矢量化操作,此方法有效地處理了大型數據集。
df.groupby('group_id').cumcount()
>可以將順序編號添加到列中,同時通過相同的值分組?以前的示例證明了此功能。
How can I optimize Python code to generate unique sequential IDs for groups of identical values within a column?groupby()
.cumcount()
Optimizing the code for generating unique sequential IDs primarily focuses on leveraging pandas' vectorized operations and avoiding explicit loops.以前的示例已經展示了此優化。 為了進一步提高非常大的數據集的性能:
inplace=True
)有時可以提高性能。 但是,與可讀性成本相比,性能的增長通常可以忽略不計。 以上是如何用Python高效地為數據列添加連續序號,使相同值擁有相同序號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!