Pandas 用对应值的最大值填充组[PANDES]
我有一列包含事件的值Pandas 用对应值的最大值填充组[PANDES],pandas,Pandas,我有一列包含事件的值 [15, 30, 10, 25, 10, 5, 15, 20, 15] 第二列定义了事件A还是事件B ['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A'] 基于与它所属事件相关的值索引,我想用相应的值“填充”事件 [30, 30, 30, 30, 10, 10, 20, 20, 20] 因为前30个值的索引属于事件A的这个特定部分,所以我们用30来填充该事件,以此类推 示例如下: df = pd.DataFrame({'val':
[15, 30, 10, 25, 10, 5, 15, 20, 15]
第二列定义了事件A还是事件B
['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A']
基于与它所属事件相关的值索引,我想用相应的值“填充”事件
[30, 30, 30, 30, 10, 10, 20, 20, 20]
因为前30个值的索引属于事件A的这个特定部分,所以我们用30来填充该事件,以此类推
示例如下:
df = pd.DataFrame({'val': [15, 30, 10, 25, 10, 5, 15, 20, 15],
'event': ['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A']})
val event
1 15.0 A
2 30.0 A
3 10.0 A
4 25.0 A
5 10.0 B
6 5.0 B
7 15.0 A
8 20.0 A
9 15.0 A
我希望我的输出列是
[30,30,30,30,10,10,20,20]
让我们尝试使用shift
和cumsum
进行transform
df.groupby(df['event'].shift().ne(df.event).cumsum()).val.transform('max')
0 30
1 30
2 30
3 30
4 10
5 10
6 20
7 20
8 20
Name: val, dtype: int64
让我们尝试使用
shift
和cumsum
df.groupby(df['event'].shift().ne(df.event).cumsum()).val.transform('max')
0 30
1 30
2 30
3 30
4 10
5 10
6 20
7 20
8 20
Name: val, dtype: int64
看起来这不管用。当一个事件的全局最大值应该是本地值(即,最后3个值应该是20)时,它会采用全局最大值,但这看起来不起作用。当事件应为本地时,它采用事件的全局最大值(即,最后3个值应为20)