python - 识别和计算 DataFrame 中的连续行
问题描述
我有以下数据框:
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
我找到了一种方法来识别值的索引,但我必须更改 hem ino 数字才能工作,我不知道如何生成列代表:
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]
解决方案
Series
通过比较创建连续组Series.shift
for not equal bySeries.ne
与累积总和Series.cumsum
最后一次使用Series.map
with Series.value_counts
:
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
推荐阅读
- node.js - Mongodb Atlas:错误:用户名包含非法的意外字符
- c# - 我需要在结构 C# 中使用字段初始化的替代方法(在结构中不能有实例字段初始化器)
- c - 如何更改 ls -l 自定义命令的月份格式
- node.js - Firebase 云消息传递成功 sendToDevice 但没有通知
- c# - 为什么清除 RowFilter 后数据表行仍然被过滤?
- python - 调试在 AWS 中存储和执行的本地 Python 代码
- javascript - HttpClientModule 返回空数组
- ssis - 无法更改外部列长度
- docker - Fedora Docker 镜像没有 xargs
- generator - MobX 状态树生成器不允许在成功的承诺中修改状态?