2015-09-17 14 views
6

Nội suy là dễ dàng trong gấu trúc bằng cách sử dụng df.interpolate() là có một phương pháp trong gấu trúc với cùng một sự thanh lịch làm một cái gì đó như ngoại suy. Tôi biết ngoại suy của tôi được trang bị cho một polynom độ thứ hai.ngoại suy gấu trúc của đa thức

+0

Bạn có thể phải sử dụng 'scipy.interpolate.UnivariateSpline' trong đó có một 'tùy chọn ext'. – askewchan

+0

Liên quan: [Giá trị ngoại suy trong Pandas DataFrame] (https://stackoverflow.com/questions/22491628/extrapolate-values-in-pandas-dataframe), nhưng trường hợp đơn giản hơn có thể được giải quyết bằng phương pháp khác. – askewchan

+0

Hiện tại có [câu trả lời] (http://stackoverflow.com/a/35959909/2087463) cho câu hỏi đó với các chi tiết cụ thể về ngoại suy đa thức. – tmthydvnprt

Trả lời

1

"Với cùng một sự thanh lịch" là một trật tự hơi cao nhưng điều này có thể được thực hiện. Theo tôi biết, bạn sẽ cần tính toán các giá trị ngoại suy theo cách thủ công. Lưu ý rằng rất khó có những giá trị này sẽ rất có ý nghĩa trừ khi dữ liệu bạn đang hoạt động thực sự tuân theo luật của hình thức nội suy.

Ví dụ, kể từ khi bạn yêu cầu một mức độ thứ hai phù hợp đa thức:

import numpy as np 
t = df["time"] 
dat = df["data"] 
p = np.poly1d(np.polyfit(t,data,2)) 

Bây giờ p (t) là giá trị của đa thức phù hợp nhất tại thời điểm t.

0

Phép ngoại suy

Xem answer này cho cách extrapolate các giá trị của mỗi cột của một DataFrame với một 3rd order polynomial. Bạn có thể dễ dàng sử dụng different order (e.g. 2nd order) polynomial bằng cách thay đổi func().

Snippet từ answer

# Function to curve fit to the data 
def func(x, a, b, c, d): 
    return a * (x ** 3) + b * (x ** 2) + c * x + d 

# Initial parameter guess, just to kick off the optimization 
guess = (0.5, 0.5, 0.5, 0.5) 

# Create copy of data to remove NaNs for curve fitting 
fit_df = df.dropna() 

# Place to store function parameters for each column 
col_params = {} 

# Curve fit each column 
for col in fit_df.columns: 
    # Get x & y 
    x = fit_df.index.astype(float).values 
    y = fit_df[col].values 
    # Curve fit column and get curve parameters 
    params = curve_fit(func, x, y, guess) 
    # Store optimized parameters 
    col_params[col] = params[0] 

# Extrapolate each column 
for col in df.columns: 
    # Get the index values for NaNs in the column 
    x = df[pd.isnull(df[col])].index.astype(float).values 
    # Extrapolate those points with the fitted function 
    df[col][x] = func(x, *col_params[col]) 
Các vấn đề liên quan