2015-09-17 17 views
6

df.interpolate() का उपयोग करके पांडा में इंटरपोलिंग आसान है पांडा में एक विधि है कि समान लालित्य के साथ कुछ अलग करना है। मुझे पता है कि मेरा एक्सट्रापोलेशन दूसरे डिग्री बहुपद के लिए लगाया गया है।बहुपद के pandas extrapolation

+0

से आप 'उपयोग करने के लिए scipy.interpolate.UnivariateSpline' जो एक' ext' का विकल्प है हो सकता है। – askewchan

+0

संबंधित: [पांडस डेटाफ्रेम में मूल्यों को निकालें] (https://stackoverflow.com/questions/22491628/extrapolate-values-in-pandas-dataframe), लेकिन एक आसान मामला जो किसी अन्य विधि द्वारा हल किया जा सकता था। – askewchan

+0

अब एक [उत्तर] (http://stackoverflow.com/a/35959909/2087463) उस प्रश्न के लिए बहुपद extrapolation पर विशिष्टताओं के साथ है। – tmthydvnprt

उत्तर

1

"एक ही लालित्य के साथ" कुछ हद तक लंबा आदेश है लेकिन यह किया जा सकता है। जहां तक ​​मुझे पता है कि आपको extrapolated मानों को मैन्युअल रूप से गणना करने की आवश्यकता होगी। ध्यान दें कि यह बहुत ही असंभव है कि ये मान बहुत सार्थक होंगे जब तक कि आप जिस डेटा पर काम कर रहे हैं वह वास्तव में इंटरपोलेंट के रूप में कानून का पालन नहीं करता है।

उदाहरण के लिए, जब से तुम एक दूसरे की डिग्री बहुपद फिट का अनुरोध:

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

अब पी (टी) समय t पर सबसे फिट बहुपद का मान है।

0

एक्सट्रपलेशन

कैसे एक 3rd order polynomial के साथ एक DataFrame के प्रत्येक स्तंभ के मान extrapolate करने के लिए इस answer देखें। different order (e.g. 2nd order) polynomial का उपयोग func() को बदलकर आसानी से किया जा सकता है।

स्निपेट 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]) 
संबंधित मुद्दे