Python应用迭代回归
我正在努力获得以下输出 数据集优先: 我一直在使用以下代码获取输出,但每次都失败:Python应用迭代回归,python,python-3.x,pandas,numpy,jupyter-notebook,Python,Python 3.x,Pandas,Numpy,Jupyter Notebook,我正在努力获得以下输出 数据集优先: 我一直在使用以下代码获取输出,但每次都失败: import numpy as np import pandas as pd from scipy import stats df=pd.read_excel('I:/Python/Data/Copy.xlsx') grouped = df.groupby('Test Event') for test_event, g in grouped: print('Test Event: {}'.forma
import numpy as np
import pandas as pd
from scipy import stats
df=pd.read_excel('I:/Python/Data/Copy.xlsx')
grouped = df.groupby('Test Event')
for test_event, g in grouped:
print('Test Event: {}'.format(test_event))
df_np=np.array(g)
x=np.array(df_np[:,3],dtype=float)
y=np.array(df_np[:,4],dtype=float)
for i, pair in enumerate(zip(x, y)):
slope, intercept, r_value, p_value, std_err = stats.linregress(np.delete(x,i),np.delete(y,i))
print('slope', slope, 'for data without pair', i, ':', pair)
这就是所需要的:对于每个测试事件,都有一个唯一的ID。对于每个唯一的ID,都有一个斜率。获得坡度的方法在图像的注释部分提到
我如何着手解决这个问题
在jupyter笔记本中,需要的最终输出如下:
它仅为测试事件111和112的“无对9的数据”提供输出
我需要“无对0的数据”、“无对9的数据”作为每个事件的输出。
您需要按如下方式缩进代码,以确保循环中存在循环:
for test_event, g in grouped:
# loop over the groups
print('Test Event: {}'.format(test_event))
df_np=np.array(g)
x=np.array(df_np[:,3],dtype=float)
y=np.array(df_np[:,4],dtype=float)
for i, pair in enumerate(zip(x, y)):
# loop over the rows within each group
slope, intercept, r_value, p_value, std_err = stats.linregress(np.delete(x,i),np.delete(y,i))
print('slope', slope, 'for data without pair', i, ':', pair)
不必转换为数组和zip,一种稍微简单的方法是:
grouped = df.groupby('Test Event')
df["slope"] = np.NaN
for test_event, g in grouped:
print('Test Event: {}'.format(test_event))
for i in g.index:
others = g.loc[g.index != i, ["x-axis", "y-axis"]]
slope, intercept, r_value, p_value, std_err = stats.linregress(others)
print ("slope", slope, 'for data without pair', i)
df.loc[i, "slope"] = slope
这也会将斜率添加到数据帧。您的代码得到了什么输出?@Stuart,我添加了我使用Jupyter笔记本获得的输出。@Stuart,从输出图像可以看出,代码只查看事件111和事件112的对9。我希望它从第0对变为第9对。检查是否为x和y选择了正确的列-记住编号从0开始。它可能是x=np.arraydf_np[:,3]。。。y=np.arraydf_np[:,4]。。。。另外,请检查您的表格,上面的代码中似乎没有显示缩进选项卡。我假设您实际使用的代码中有缩进。请尝试在上面的代码中添加缩进,使其匹配。这可能是问题的根源。这个解决方案确实有效。是的,第二个解决方案比我尝试的第一个要好得多。要编辑代码的哪一部分,如果现在不是1点,我需要删除两个点并计算其他8点的斜率?我的意思是对于事件111,如果我删除点0,1;0,2;0,3;...;0,9,然后我得到10个斜率。1,2需要进行类似的操作;1,3;1,4...1,9. 如果这超出了当前问题的范围,我将创建一个新的。在g.index:,或使用例如itertools.combinationsg.index,leng.index-2中的j进一步嵌套循环,以获得每次移除两个点的所有索引组合。如果你需要更详细的信息,可以问一个新问题。是的,我正在问一个新问题,因为这里的解释可能会很长。再次感谢您的帮助!他问了一个新问题。