python - 创建一列,按条件将一组行的最大值分配给该组中的所有行
问题描述
我有一个看起来像这样的数据框:
data metadata
A 0
A 1
A 2
A 3
A 4
B 0
B 1
B 2
A 0
A 1
B 0
A 0
A 1
B 0
df.data
包含两个不同的类别,A
和B
。df.metadata
存储在类别更改之前类别连续出现的次数的运行计数。我想创建一个列consecutive_count
,将每个连续组的元数据最大值分配给该组中的每一行。它应该如下所示:
data metadata consecutive_count
A 0 4
A 1 4
A 2 4
A 3 4
A 4 4
B 0 2
B 1 2
B 2 2
A 0 1
A 1 1
B 0 0
A 0 1
A 1 1
B 0 0
请指教。谢谢你。
解决方案
方法1:
您可以尝试max
对每组的groupby进行转换data
s = df.data.ne(df.data.shift()).cumsum()
df['consecutive_count'] = df.groupby(s).metadata.transform('max')
Out[96]:
data metadata consecutive_count
0 A 0 4
1 A 1 4
2 A 2 4
3 A 3 4
4 A 4 4
5 B 0 2
6 B 1 2
7 B 2 2
8 A 0 1
9 A 1 1
10 B 0 0
11 A 0 1
12 A 1 1
13 B 0 0
方法 2:
由于metadata
是按组排序的,您可以反转数据帧并执行 groupbycummax
s = df.data.ne(df.data.shift()).cumsum()
df['consecutive_count'] = df[::-1].groupby(s).metadata.cummax()
Out[101]:
data metadata consecutive_count
0 A 0 4
1 A 1 4
2 A 2 4
3 A 3 4
4 A 4 4
5 B 0 2
6 B 1 2
7 B 2 2
8 A 0 1
9 A 1 1
10 B 0 0
11 A 0 1
12 A 1 1
13 B 0 0
推荐阅读
- javascript - 在导航栏组件中结合 bootstrap-vue 和 vue-router
- batch-file - 带有异常的 Robocopy 脚本不起作用
- python - 多索引查找映射
- c# - 关于我应该使用什么的建议 - 索引器、函数或其他方法
- android - 使用NDK库时是否需要在build.gradle文件中添加arm64-v8a
- r - 如何使用条件测试迭代地填充数据框中的值
- python - SQLAlchemy:如何从 Array 字段中获取所有不同的值?
- boto3 - 如何使用 Boto3 仅从 s3 存储桶获取文件名
- excel - 在 Excel VBA 中单击按钮后切换单元格值
- python - 不能让我的第一个蜘蛛运行,有什么建议吗?