Pandas 如何根据与事件[熊猫]相关的值索引,用值填充事件

Pandas 如何根据与事件[熊猫]相关的值索引,用值填充事件,pandas,dataframe,Pandas,Dataframe,对不起,如果标题不清楚的话,这个问题我有点难以总结 我有一列,其中包含一个峰值事件的值。非峰值仅为nan [np.nan, 30, np.nan, np.nan, 10, np.nan, np.nan, 20, np.nan] 第二列定义了事件A还是事件B ['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A'] 根据与它所属事件相关的值的索引,我想用相应的值填充事件 [30, 30, 30, 30, 10, 10, 20, 20, 20] 因为前30个值

对不起,如果标题不清楚的话,这个问题我有点难以总结

我有一列,其中包含一个峰值事件的值。非峰值仅为nan

[np.nan, 30, np.nan, np.nan, 10, np.nan, np.nan, 20, np.nan]
第二列定义了事件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': [np.nan, 30, np.nan, np.nan, 10, np.nan, np.nan, 20, np.nan],
                   'event': ['A', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'A']})

    val event
1   NaN     A
2  30.0     A
3   NaN     A
4   NaN     A
5  10.0     B
6   NaN     B
7   NaN     A
8  20.0     A
9   NaN     A
我希望我的输出列是[30,30,30,30,10,10,20,20,20]

使用groupby.apply:


从一些初步测试来看,这似乎是我需要的。谢谢如果没有NaN,是否仍有修改此项以执行相同的操作以获取组的最大值?
df['output'] = df.groupby(df['event'].shift().ne(df['event']).cumsum())['val']\
                 .apply(lambda x: x.fillna(x.max()))

print(df)
    val event  output
0   NaN     A    30.0
1  30.0     A    30.0
2   NaN     A    30.0
3   NaN     A    30.0
4  10.0     B    10.0
5   NaN     B    10.0
6   NaN     A    20.0
7  20.0     A    20.0
8   NaN     A    20.0