Python 创建一列,按条件将行集合的最大值分配给该组中的所有行
我有一个如下所示的数据帧:Python 创建一列,按条件将行集合的最大值分配给该组中的所有行,python,pandas,Python,Pandas,我有一个如下所示的数据帧: 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 data metadata consecutive_count A 0
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
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
df.data
包含两个不同的类别,A
和B
df.metadata
存储一个运行计数,即类别更改之前连续出现的次数。我想创建一个列continuous\u count
,将每个连续组的元数据的最大值分配给该组中的每一行。应该是这样的:
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
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:
您可以尝试在每组
数据的groupby上转换max
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:
因为元数据
是按组排序的,所以您可以反转数据帧并按cummax
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
cummax
方法非常好