插件窝 干货文章 Python Pandas如何为数据列添加序号,且连续相同值赋予相同序号?

Python Pandas如何为数据列添加序号,且连续相同值赋予相同序号?

序号 相同 连续 赋予 309    来源:    2025-03-15

在Pandas中,你可以使用groupbycumcount方法来为数据列添加序号,并且为连续相同的值赋予相同的序号。以下是一个示例代码,展示如何实现这一功能:

import pandas as pd

# 示例数据
data = {'A': ['a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c']}
df = pd.DataFrame(data)

# 添加序号列
df['序号'] = df.groupby((df['A'] != df['A'].shift()).cumsum()).cumcount() + 1

print(df)

代码解释:

  1. df['A'] != df['A'].shift():这个表达式用于检测当前行的值是否与前一行不同。如果不同,返回True,否则返回False
  2. .cumsum():将布尔值转换为整数(True为1,False为0),然后累加。这样,连续相同的值会被赋予相同的组号。
  3. groupby:根据上一步生成的组号进行分组。
  4. cumcount() + 1:为每个组内的行生成从1开始的连续序号。

输出结果:

   A  序号
0  a   1
1  a   2
2  b   1
3  b   2
4  b   3
5  c   1
6  c   2
7  c   3
8  c   4

在这个例子中,列A中的连续相同值被赋予了相同的组号,并且每个组内的行被赋予了从1开始的连续序号。

如果你希望连续相同值赋予相同的序号,而不是递增的序号,可以使用以下代码:

import pandas as pd

# 示例数据
data = {'A': ['a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c']}
df = pd.DataFrame(data)

# 添加序号列
df['序号'] = (df['A'] != df['A'].shift()).cumsum()

print(df)

输出结果:

   A  序号
0  a   1
1  a   1
2  b   2
3  b   2
4  b   2
5  c   3
6  c   3
7  c   3
8  c   3

在这个例子中,连续相同的值被赋予了相同的序号。