识别和统计数据帧中的连续行

2024-04-27 21:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据框:

df = pd.DataFrame({'Tipo': ['A','A','B','B','B','C','B','A','C','B','A','A','A','A','A','A','A','C','B','B','A']})

     Type
0     A
1     A
2     B
3     B
4     B
5     C
6     B
7     A
8     C
9     B
10    A
11    A
12    A
13    A
14    A
15    A
16    A
17    C
18    B
19    B
20    A 

目标是创建一个新列“Rep”,该列统计第一次重复的值所对应的连续行,例如:

     Type  Rep
0     A     2
1     A     2
2     B     3
3     B     3
4     B     3
5     C     1
6     B     1
7     A     1
8     C     1
9     B     1
10    A     7
11    A     7
12    A     7
13    A     7
14    A     7
15    A     7
16    A     7
17    C     1
18    B     2
19    B     2
20    A     1

我找到了一种方法来识别值的索引,但我必须更改这些值的编号才能正常工作,我不知道如何生成列rep:

df.loc[df['Type'] == 'B', 'Type'] = 2
mask = df == 2

index_type = mask.type[mask.type].index.values

输出:

[2 3 4 6 9 18 19]

1条回答
网友
1楼 · 发布于 2024-04-27 21:34:38

通过比较^{}为不等于^{}创建的Series与累计和^{}和上次使用^{}^{}来创建连续组:

g = df['Type'].ne(df['Type'].shift()).cumsum()
df['Rep'] = g.map(g.value_counts())

^{}计数:

df['Rep'] = g.groupby(g).transform('size')

print (df)
   Type  Rep
0     A    2
1     A    2
2     B    3
3     B    3
4     B    3
5     C    1
6     B    1
7     A    1
8     C    1
9     B    1
10    A    7
11    A    7
12    A    7
13    A    7
14    A    7
15    A    7
16    A    7
17    C    1
18    B    2
19    B    2
20    A    1

详细信息

print (g)
0      1
1      1
2      2
3      2
4      2
5      3
6      4
7      5
8      6
9      7
10     8
11     8
12     8
13     8
14     8
15     8
16     8
17     9
18    10
19    10
20    11
Name: Type, dtype: int32

相关问题 更多 >