簡體   English   中英

大熊貓數據框列的插值

[英]interpolation on pandas dataframe columns

我需要在 2 列pandas.DataFrame之間進行插值,以填充它們之間的列。 這是我的data frame的幾行,要填充的列是col2

col1  col2  col3
2.35    1   2.37
2.47    1   2.49
2.51    1   2.53
2.57    1   2.58
2.54    1   2.57

所以對於插值,我想使用numpy.interp(x,xp,fp) ,但我不知道如何組織我的數據以便我能夠使用它。 那是因為每行的插值應該在col1col3之間 例如,對於第一行,我需要它看起來像這樣:

xp=[1,3]
fp=[2.47,2.49]
x=2
y=numpy.interp(x,xp,fp)

然后用y填充col2第一行。 我需要為每一行一次又一次地這樣做。 如何 ?

這將使您遍歷每一行,替換兩個單元格之間的值。 但插值似乎不起作用。 我沒有太多的經驗,所以我在網上找不到簡單的解決方法。 這是唯一不改變值的行。 (我不知道 xp 或 x 是做什么的,所以我保留了它們)

xp=[1,3]
x = 2
for rowNr in range(len(df.index)):
    fp=[df.iat[rowNr, 0], df.iat[rowNr, 2]]
    df.iat[rowNr, 1] = numpy.interp(x, xp, fp)

正如所寫,x 值是靜態的(除非我誤解了您的問題),值為 1 和 3。您希望在這些值和兩個變化的 y 值之間進行線性插值。 您只需平均 y 值,這就是線性插值。 不要忽視一些花哨的簡單/明顯的解決方案(我一直努力記住的建議)。

df.col2 = df[["col1", "col3"]].mean(axis=1)

開始編輯

安德烈的解決方案應該有效(我自己沒有測試過,但應該有效)。 但是,這需要迭代每一行,這可能很慢。 此外,有一個簡單的數學解決方案可以讓您對數組進行操作,這應該會更快。

線性插值遵循以下一般形式:

y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)

把它放在數據幀/代碼方面:

df.col2 = df.col1 + (x - xp[0]) * (df.col2 - df.col1) / (xp[1] - xp[0])

我認為翻譯正確,但上面的公式成立。 只需在您的代碼中實現它或遍歷每一行並調用 numpy.interp 函數。 無論哪種方式,你都應該沒事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM