我的問題是,一旦觀察到 NaN,如何覆寫資料幀分組中的后續值?
在下面的資料框中,一旦NaN觀察到特定分組的 a (即相同的Pos和Stop值),我想以NaN矢量化的方式將 s 復制到分組中的后續行。
import numpy as np
import pandas as pd
df = pd.DataFrame({
'Pos': [np.nan, np.nan, 1., 1., -1., -1., np.nan, -1., -1., -1., -1., 1., np.nan, 1., np.nan, 1., 1.],
'Stop': [np.nan, np.nan, 122.86, 122.86, 128. , 128. , np.nan, 128. , 128, 125.8 , 125.8 , 124.05, np.nan, 123.85, np.nan, 123.85, 123.85]},
index = pd.date_range('2022-01-01',periods=17))
df
Pos Stop
2022-01-01 NaN NaN
2022-01-02 NaN NaN
2022-01-03 1.0 122.86
2022-01-04 1.0 122.86
2022-01-05 -1.0 128.00
2022-01-06 -1.0 128.00
2022-01-07 NaN NaN
2022-01-08 -1.0 128.00
2022-01-09 -1.0 128.00
2022-01-10 -1.0 125.80
2022-01-11 -1.0 125.80
2022-01-12 1.0 124.05
2022-01-13 NaN NaN
2022-01-14 1.0 123.85
2022-01-15 NaN NaN
2022-01-16 1.0 123.85
2022-01-17 1.0 123.85
例如,因為2022-01-07containsNaNs和 since 2022-01-08&2022-01-09為Pos(例如 -1)和Stop(例如 128)提供了與 之前的兩行相同的值NaN,我想用 s 替換2022-01-08&2022-01-09行中的值NaN。同樣,由于2022-01-15包含NaNs,我想用s 替換 s 中2022-01-16的值。請注意,特定分組的 s 上方的行應保持不變。2022-01-17NaNNaN
我嘗試使用 agroupby但不成功。NaN因此,我的問題是,一旦NaN觀察到a ,如何用 s 覆寫資料幀中的后續值?
預期輸出如下:
df1
Pos Stop
2022-01-01 NaN NaN
2022-01-02 NaN NaN
2022-01-03 1.0 122.86
2022-01-04 1.0 122.86
2022-01-05 -1.0 128.00
2022-01-06 -1.0 128.00
2022-01-07 NaN NaN
2022-01-08 NaN NaN
2022-01-09 NaN NaN
2022-01-10 -1.0 125.80
2022-01-11 -1.0 125.80
2022-01-12 1.0 124.05
2022-01-13 NaN NaN
2022-01-14 1.0 123.85
2022-01-15 NaN NaN
2022-01-16 NaN NaN
2022-01-17 NaN NaN
uj5u.com熱心網友回復:
pandas.DataFrame.interpolate使用and的一種方法where:
df2 = df.interpolate()
m = df["Pos"].notna()
m = df2.assign(tmp=m).groupby(["Pos", "Stop"])["tmp"].cummin().eq(1)
new_df = df.where(m)
print(new_df)
輸出:
Pos Stop
2022-01-01 NaN NaN
2022-01-02 NaN NaN
2022-01-03 1.0 122.86
2022-01-04 1.0 122.86
2022-01-05 -1.0 128.00
2022-01-06 -1.0 128.00
2022-01-07 NaN NaN
2022-01-08 NaN NaN
2022-01-09 NaN NaN
2022-01-10 -1.0 125.80
2022-01-11 -1.0 125.80
2022-01-12 1.0 124.05
2022-01-13 NaN NaN
2022-01-14 1.0 123.85
2022-01-15 NaN NaN
2022-01-16 NaN NaN
2022-01-17 NaN NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415642.html
標籤:
下一篇:通過python從串列中洗掉數字
