我可以获取数据框三列的斜率并使用 python 中的值创建一个新列吗?
Posted
技术标签:
【中文标题】我可以获取数据框三列的斜率并使用 python 中的值创建一个新列吗?【英文标题】:Can I get slope of three columns of a dataframe and create a new column with the values in python? 【发布时间】:2021-08-15 22:34:40 【问题描述】:在给定每行固定的 x 轴的情况下,有谁知道如何计算三列(y 轴)的斜率? 例如,这是我的数据框:
data = 'a': [1, 2, 3],
'b': [3, 4, 5],
'c': [7, 8, 9]
df = pd.DataFrame(data, columns=['a', 'b', 'c'])
我需要创建第四列“d”,其斜率为 1、3 和 7,考虑到 x 轴为例如 1、2 和 3。这 1、2、3 x -axis,应该考虑每一行数据。
【问题讨论】:
斜率定义是两个点(x1, y1)
和(x2, y2)
。例如,您是指通过(1, 1), (2, 3), (3, 7)
的衬线的斜率吗?
实际上我需要一个由三个点 (1,3,7) 和 (1,2,3) 的简单线性回归定义的斜率; (2,4,5) 和 (1,2,3); (3,5,9) 和 (1,2,3)
例如简单的线性回归 (x1, x2, x3) = (1,2,3) and (y1, y2, y3) = (1, 3, 7)
【参考方案1】:
试试这个,你可以用np.polyfit()
求斜率(通过将多项式的次数定义为1)然后计算d
并把它放入你的字典中,最后将其转换为pandas DataFrame
:
import numpy as np
import pandas as pd
def compute_slope(arr):
return round(np.polyfit([1, 2, 3], arr, 1)[0], 2)
data = 'a': [1, 2, 3],
'b': [3, 4, 5],
'c': [7, 8, 9]
data['d'] = [compute_slope(list(arr)) for arr in zip(data['a'], data['b'], data['c'])]
df = pd.DataFrame(data, columns=['a', 'b', 'c', 'd'])
compute_slope
函数中的变量 [1,2,3]
是硬编码的,因为您提到您希望有这样的 x 值。
输出:
a b c d
0 1 3 7 3.0
1 2 4 8 3.0
2 3 5 9 3.0
【讨论】:
以上是关于我可以获取数据框三列的斜率并使用 python 中的值创建一个新列吗?的主要内容,如果未能解决你的问题,请参考以下文章