我有以下数据集,用于我的研究。最终输出是斜率。
import numpy as np
import pandas as pd
from scipy import stats
df=pd.read_excel('I:/Python/Data/Copy.xlsx')
df_np=np.array(df)
x=np.array(df_np[:,14],dtype=float)
y=np.array(df_np[:,12],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)
在上面的代码中,我需要的帮助是测试事件分别输出,斜率值分别输出。test_events与坡度值之间不存在1:1的关系。
假设每个测试事件中有10个ID。
测试IDs=0,1,2,...9
测试event=11,12、13、14
这意味着在每个测试事件中,我需要每个ID的斜率
Test event ID x=axis y-axis slope
这方面的任何帮助都是很好的。
发布于 2018-09-30 00:39:21
一种方法是按Test Event
对DataFrame进行分组,然后循环遍历groupby
对象,并在每个组上运行现有代码。阅读关于迭代组in the docs的内容。
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[:,1],dtype=float)
y=np.array(df_np[:,2],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)
发布于 2018-09-30 01:09:51
您可以使用任何数组作为linegress
函数的输入。这包括您的数据帧中的系列:
linregress(df['x-axis'], df['y-axis'])
使用pandas groupby时,您可以通过apply
连接到每个组
grouped = df.groupby('Test Event')
grouped.apply(lambda x: pd.Series(linregress(x['x-axis'], x['y-axis']))).rename(columns={
0: 'slope',
1: 'intercept',
2: 'rvalue',
3: 'pvalue',
4: 'stderr'}).reset_index()
https://stackoverflow.com/questions/52570122
复制相似问题