Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dataframe-使用polyfit查找每2组列的斜率_Python_Pandas_Dataframe_Numpy - Fatal编程技术网

Python Dataframe-使用polyfit查找每2组列的斜率

Python Dataframe-使用polyfit查找每2组列的斜率,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,我有一个包含50多列的Python数据框架,如下所示: x1 y1 x2 y2 ... x25 y25 1.8 21.3 1.6 21.8 ... 1.9 21.7 2.6 25.4 2.7 26.3 ... 2.8 27.8 3.5 30.4 3.6 32.1 ... 3.3 33.6 我想用多边形拟合来求每对(x,y)的斜率。这意味着slope1=np.polyfit(x1,y1,1)[0],…,slope25=np.polyfit(x2

我有一个包含50多列的Python数据框架,如下所示:

 x1   y1    x2   y2  ...  x25  y25
1.8  21.3  1.6  21.8 ...  1.9  21.7
2.6  25.4  2.7  26.3 ...  2.8  27.8
3.5  30.4  3.6  32.1 ...  3.3  33.6
我想用多边形拟合来求每对(x,y)的斜率。这意味着slope1=np.polyfit(x1,y1,1)[0],…,slope25=np.polyfit(x25,y25,1)[0],依此类推


我很难弄清楚如何进行。任何帮助都将不胜感激。谢谢。

您可以选择成对和不成对列并传递到
np。polyfit
(所有列排序和所有对
x,y
)并在列表中计算输出:

out = [np.polyfit(df[x], df[y], 1)[0] for x, y in zip(df.columns[::2], df.columns[1::2])]

print (out)
[5.357142857142858, 5.1112956810631225, 8.294701986754967]
如有必要,最后一次传递到DataFrame:

df1 = pd.DataFrame({'no': df.columns.str.extract('(\d+)', expand=False).drop_duplicates(),
                    'slope': out})
print (df1)
   no     slope
0   1  5.357143
1   2  5.111296
2  25  8.294702
或者创建
多索引
,按
x,y
或数字拆分,然后在
groupby
中使用自定义功能:

df.columns = pd.MultiIndex.from_frame(df.columns.str.extract('([xy])(\d+)'))


def f(x):
    x = x.droplevel(1, axis=1)
    return np.polyfit(x.x, x.y, 1)[0]

df = df.groupby(axis=1, level=1).apply(f).rename_axis('no').reset_index(name='slope')
print (df)
   no     slope
0   1  5.357143
1   2  5.111296
2  25  8.294702