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



如果标题不清楚,很抱歉,我遇到的这个问题有点难以总结。

我有一个列,其中包含一个事件在其峰值时的值。非峰值只是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:

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

最新更新