Pandas 如何根据与事件[熊猫]相关的值索引,用值填充事件
对不起,如果标题不清楚的话,这个问题我有点难以总结 我有一列,其中包含一个峰值事件的值。非峰值仅为nanPandas 如何根据与事件[熊猫]相关的值索引,用值填充事件,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个值
[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