此任务涉及创建一个顺序计数器,每当特定列中的值更改时重置一个顺序计数器。 在Python中实现这一目标的最有效方法利用了pandas
>库的力量。 PANDA提供的矢量化操作比通过行迭代要快得多。
这是您可以做到的:
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)
>此代码首先使用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()
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)
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中文网其他相关文章!