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

2024-09-30 08:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含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],依此类推

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


Tags: 数据框架np多边形x1x2y1y2
1条回答
网友
1楼 · 发布于 2024-09-30 08:24:09

您可以选择pair和unpair列并传递给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或数字分割创建MultiIndex,然后在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

相关问题 更多 >

    热门问题