我有一个包含两列A
和B
的数据框。
我想创建一个名为C
的新列,以标识具有相同B
值的连续A
。
这里有一个例子
import pandas as pd
df = pd.DataFrame({'A':[1,2,3,5,6,10,11,12,13,18], 'B':[1,1,2,2,3,3,3,3,4,4]})
我找到了一个类似的question,但是这个方法只识别连续的A
,而不考虑B
。
df['C'] = df['A'].diff().ne(1).cumsum().sub(1)
我尝试过groupby B
并像这样应用函数:
df['C'] = df.groupby('B').apply(lambda x: x['A'].diff().ne(1).cumsum().sub(1))
但是,它不起作用:TypeError:插入列的索引与框架索引不兼容。
预期的输出为
A B C
1 1 0
2 1 0
3 2 1
5 2 2
6 3 3
10 3 4
11 3 4
12 3 4
13 4 5
18 4 6
2条答案
按热度按时间ogq8wdun1#
我们先使用
groupby
、diff
和cumsum
创建一个顺序计数器,然后使用factorize
对计数器进行重新编码结果
mjqavswn2#
使用
DataFrameGroupBy.diff
,比较不等于1
和Series.cumsum
,最后减去1
: