Python Dataframe-使用polyfit查找每2组列的斜率
我有一个包含50多列的Python数据框架,如下所示: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
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