Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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应用迭代回归_Python_Python 3.x_Pandas_Numpy_Jupyter Notebook - Fatal编程技术网

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进一步嵌套循环,以获得每次移除两个点的所有索引组合。如果你需要更详细的信息,可以问一个新问题。是的,我正在问一个新问题,因为这里的解释可能会很长。再次感谢您的帮助!他问了一个新问题。