Групповая функция на наборе данных Python - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть следующий набор данных, который я использую для своих исследований.Конечный результат - наклон.

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)          

Мне нужна помощь в приведенном выше коде, что тестовые события выводятся отдельно, а значения наклона выводятся отдельно.Нет никакого отношения 1: 1 между test_events и значениями наклона.

Допустим, в каждом тестовом событии есть 10 идентификаторов.

Идентификаторы тестов = 0,1,2, ... 9

Тестовое событие = 11, 12, 13, 14

Это означает, что мне нужны наклоны для каждого идентификатора в каждом тестовом событии

Test event     ID     x=axis      y-axis     slope

Любая помощь по этому вопросу будет отличной

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Вы можете использовать любой массив в качестве входных данных для функции linegress. Это включает ряды в вашем фрейме данных:

linregress(df['x-axis'], df['y-axis'])

Вы можете apply для каждой группы при использовании pandas groupby

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()
0 голосов
/ 29 сентября 2018

Один из способов - сгруппировать ваш DataFrame по Test Event, затем перебрать объект groupby и запустить существующий код в каждой группе.Читайте об итерации по группам в документации .

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...