计算熊猫系列趋势线的斜率

Dmi*_* B. 5 python numpy pandas

是否有一种惯用的方法来获取列中线性趋势线拟合值的斜率DataFrame?数据用DateTime索引编制索引。

piR*_*red 6

应该这样做:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(100, 5), pd.date_range('2012-01-01', periods=100))

def trend(df):
    df = df.copy().sort_index()
    dates = df.index.to_julian_date().values[:, None]
    x = np.concatenate([np.ones_like(dates), dates], axis=1)
    y = df.values
    return pd.DataFrame(np.linalg.pinv(x.T.dot(x)).dot(x.T).dot(y).T,
                        df.columns, ['Constant', 'Trend'])


trend(df)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

使用与df上面相同的索引:

df_sample = pd.DataFrame((df.index.to_julian_date()* 10 + 2)+ np.random.rand(100)* 1e3,df.index)

coef = trend(df_sample)
df_sample['trend'] = (coef.iloc[0, 1] * df_sample.index.to_julian_date() + coef.iloc[0, 0])
df_sample.plot(style=['.', '-'])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明