Python 计算列的前置项并创建这些计数的新变量
我有一个数据框,我想计算一列中连续条目的数量,并将计数记录在一个单独的变量中。以下是一个例子:Python 计算列的前置项并创建这些计数的新变量,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据框,我想计算一列中连续条目的数量,并将计数记录在一个单独的变量中。以下是一个例子: ID Class 1 A 1 A 2 A 1 B 1 B 1 B 2 B 1 C 1 C 2 A 2 A
ID Class
1 A
1 A
2 A
1 B
1 B
1 B
2 B
1 C
1 C
2 A
2 A
2 A
我希望在每个组ID中计算连续类的数量,因此输出如下所示:
ID Class Counts
1 A 0
1 A 1
2 A 0
1 B 0
1 B 1
1 B 2
2 B 0
1 C 0
1 C 1
2 A 0
2 A 1
2 A 2
我不是看特定条目的出现频率,而是看ID级别的条目连续出现的频率,您可以通过系列使用,该系列是通过以下移动concanate值创建的:
另一个带有(0.20.2+
)的解决方案:
#use separator which is not in data like _ or ¥
s = df['ID'].astype(str) + '¥' + df['Class']
df['Counts'] = df.groupby(s.ne(s.shift()).cumsum()).cumcount()
print (df)
ID Class Counts
0 1 A 0
1 1 A 1
2 2 A 0
3 1 B 0
4 1 B 1
5 1 B 2
6 2 B 0
7 1 C 0
8 1 C 1
9 2 A 0
10 2 A 1
11 2 A 2
s = df.groupby(['ID','Class']).ngroup()
df['Counts'] = df.groupby(s.ne(s.shift()).cumsum()).cumcount()
print (df)
ID Class Counts
0 1 A 0
1 1 A 1
2 2 A 0
3 1 B 0
4 1 B 1
5 1 B 2
6 2 B 0
7 1 C 0
8 1 C 1
9 2 A 0
10 2 A 1
11 2 A 2