我有一個資料框架df,看起來像這樣的
print(df)。
x outlier_flag
10 1
NaN 1
30 1
543 -1
50 1
我想用outlier_flag==-1與row['A][i-1]和row['A][i 1]之間的插值來替換被標記的值,也就是說我想用40來替換所呈現的錯誤值543。
我可以做的是
df['x'] = df.apply(lambda row: np. if row['outlier_flag']==-1 else row['x'] 。axis=1)
df.interpolate(method='polynomial', order=3, inplace=True)
但是我不想這樣做,因為這也會在df['x']中插值nan,這些值沒有標明outlier_flag==-1(見第二行的內容)!
nan值,沒有標記的標志,我想保留為nan,以便以后的任務。
那么,有沒有一種方法可以在原地進行插值,即使是像 我試著做了 但是這拋出了一個錯誤,因為只有 uj5u.com熱心網友回復: 使用 uj5u.com熱心網友回復: 這是你可以按照你的意圖使用 你可以首先創建一個串列,其中包含離群值為-1的行的索引,并使用 然后,你可以使用 其中列印出:
標籤:543這樣不屬于nan的值?
df['x'] = df. apply(lambda row: row['x'].interpolate(method='polynomial', order= 3) if row['outlier_flag']==-1 else row['x'] 。axis=1)
nan可以被插值,而543是int。你對我有什么建議嗎?Tnxnp.where:df['x'] = np. where(df['outlier_flag'] == -1, (df['x'] 。 shift('x') df['x'].shift(-1))/2,df['x']
print(df)
x outlier_flag
0 10.0 1
1 NaN 1
230.0 1
3 40.0 -1
4 50.0 1
interpolate()的方法。loc將x中的值替換為np.nan:incl = df.index[df['outlier_flag'] == -1] .tolist()
df.loc[df.index.isin( incl), 'x'] = np.nan
>>> df
x outlier_flag
0 10.0 1
1 NaN 1
230.0 1
3 NaN -1
4 50.0 1
np.where來檢查x是否isnull()以及該特定索引是否在你創建的串列中,并應用你的插值:df['x']= np.where( ( df['x']. isnull()) & (df.index.isin( incl)), df['x'].interpolate(),df['x'] )
x outlier_flag
0 10.0 1
1 NaN 1
230.0 1
3 40.0 -1
4 50.0 1
