首页 >后端开发 >Python教程 >如何用Python高效地为数据列添加连续序号,使相同值拥有相同序号?

如何用Python高效地为数据列添加连续序号,使相同值拥有相同序号?

Johnathan Smith
Johnathan Smith原创
2025-03-03 17:09:06386浏览

>如何有效地将连续的数字添加到Python中的数据列中,将相同的数字分配给相同的值?

此任务涉及创建一个顺序计数器,每当特定列中的值更改时重置一个顺序计数器。 在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()

What's the most efficient Python method for creating a sequential ID based on duplicate values in a column?

The most efficient method builds upon the previous approach, refining it to generate more descriptive sequential IDs. 我们可以创建明确反映分组的ID,而不是简单地分配连续的数字。 这是通过将组标识符与每个组中的顺序计数器组合在一起来实现的。

<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()>可以将顺序编号添加到列中,同时通过相同的值分组?以前的示例证明了此功能。

方法与

结合使用,提供了一种强大而有效的方法,可以在列中由相同值定义的组中添加顺序编号。 The efficiency stems from pandas' ability to perform these operations on the entire DataFrame at once, avoiding slow row-by-row iteration.

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)有时可以提高性能。 但是,与可读性成本相比,性能的增长通常可以忽略不计。
  • 块(对于非常大的数据集):如果您的数据集如此之大,以至于超过可用的内存,请考虑在块中处理。 读取和处理数据中的较小,可管理的零件,然后将结果串联。
  • >考虑替代数据结构(很少必要):
  • >通常有效地有效,对于数十亿行,专门的图书馆或数据库而言,针对此类操作的专业库或数据库非常有效。 但是,整合这些替代方案的复杂性通常超过了大多数实际应用的好处。
  • 上面使用pandas提供的解决方案通常在大多数实际涉及基于分组的顺序ID生成的现实世界情景中高度优化。 专注于有效的熊猫技术是最有效的优化方法。

以上是如何用Python高效地为数据列添加连续序号,使相同值拥有相同序号?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn