Pandas 根据连续重复项创建新列
Pandas creating new column based on consecutive duplicates
我有一个如下所示的 Pandas 数据框,其中 A 列是一系列字符串,B 列中的值是 true/false,具体取决于 A 列的值是否相同作为上一行中 A 列的值。
A B
1 False
1 True
1b False
1b True
1b True
1 False
我想添加一个新列 C,它为所有 连续的重复项 分配相同的值(可以是任何值),但是这个值必须是唯一的分配给其他连续重复条目组的值。例如:
A B C
1 False 1
1 True 1
1b False 2
1b True 2
1b True 2
1 False 3
关于如何有效地解决这个问题有什么想法吗?
尝试 groupby ngroup
+ 1 一定要 sort=False
以确保组是按照它们在 DataFrame 中出现的顺序创建的:
df['C'] = df.groupby(['A', (~df['B']).cumsum()], sort=False).ngroup() + 1
A B C
0 1 False 1
1 1 True 1
2 1b False 2
3 1b True 2
4 1b True 2
5 1 False 3
或者假设值按 cumsum
的排序顺序出现,可以直接使用以下任一方法:
df['C'] = (~df['B']).cumsum()
A B C
0 1 False 1
1 1 True 1
2 1b False 2
3 1b True 2
4 1b True 2
5 1 False 3
这相当于:
df['A'].ne(df['A'].shift()).cumsum()
0 1
1 1
2 2
3 2
4 2
5 3
Name: A, dtype: int32
如果尚未计算 B
列,这将是解决此问题的标准方法。
尝试与 shift
结合 cumsum
df['C'] = df.A.ne(df.A.shift()).cumsum()
Out[191]:
0 1
1 1
2 2
3 2
4 2
5 3
Name: A, dtype: int64
我想这就是你要找的。
df['C'] = df.groupby('A').ngroup() + 1
我有一个如下所示的 Pandas 数据框,其中 A 列是一系列字符串,B 列中的值是 true/false,具体取决于 A 列的值是否相同作为上一行中 A 列的值。
A B
1 False
1 True
1b False
1b True
1b True
1 False
我想添加一个新列 C,它为所有 连续的重复项 分配相同的值(可以是任何值),但是这个值必须是唯一的分配给其他连续重复条目组的值。例如:
A B C
1 False 1
1 True 1
1b False 2
1b True 2
1b True 2
1 False 3
关于如何有效地解决这个问题有什么想法吗?
尝试 groupby ngroup
+ 1 一定要 sort=False
以确保组是按照它们在 DataFrame 中出现的顺序创建的:
df['C'] = df.groupby(['A', (~df['B']).cumsum()], sort=False).ngroup() + 1
A B C
0 1 False 1
1 1 True 1
2 1b False 2
3 1b True 2
4 1b True 2
5 1 False 3
或者假设值按 cumsum
的排序顺序出现,可以直接使用以下任一方法:
df['C'] = (~df['B']).cumsum()
A B C
0 1 False 1
1 1 True 1
2 1b False 2
3 1b True 2
4 1b True 2
5 1 False 3
这相当于:
df['A'].ne(df['A'].shift()).cumsum()
0 1
1 1
2 2
3 2
4 2
5 3
Name: A, dtype: int32
如果尚未计算 B
列,这将是解决此问题的标准方法。
尝试与 shift
结合 cumsum
df['C'] = df.A.ne(df.A.shift()).cumsum()
Out[191]:
0 1
1 1
2 2
3 2
4 2
5 3
Name: A, dtype: int64
我想这就是你要找的。
df['C'] = df.groupby('A').ngroup() + 1