在Pandas中,你可以使用groupby
和cumcount
方法来为数据列添加序号,并且为连续相同的值赋予相同的序号。以下是一个示例代码,展示如何实现这一功能:
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)
df['A'] != df['A'].shift()
:这个表达式用于检测当前行的值是否与前一行不同。如果不同,返回True
,否则返回False
。.cumsum()
:将布尔值转换为整数(True
为1,False
为0),然后累加。这样,连续相同的值会被赋予相同的组号。groupby
:根据上一步生成的组号进行分组。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
在这个例子中,连续相同的值被赋予了相同的序号。