我正在努力获得以下输出。
首先设置数据集:
我一直在使用以下代码来获取输出,但是每次都失败:
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 :(得分:1)
您需要按以下方式缩进代码,以确保循环中存在循环:
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
这还将斜率添加到数据框中。