Доступ к другому уровню многоуровневого индекса, затем преобразование столбца для этого индекса в массив, чтобы затем перейти к функции - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть датафрейм.Ниже приведен фрагмент кода:

import pandas as pd

data = {'EVENT_ID': [112335580,112335580,112335580,112335580,112335580,112335580,112335580,112335580, 112335582,
                         112335582,112335582,112335582,112335582,112335582,112335582,112335582,112335582,112335582,
                         112335582,112335582,112335582],

     'SELECTION_ID': [6356576,2554439,2503211,6297034,4233251,2522967,5284417,7660920,8112876,7546023,8175276,8145908,
                      8175274,7300754,8065540,8175275,8106158,8086265,2291406,8065533,8125015],

     'BSP': [5.080818565,6.651493872,6.374683435,24.69510797,7.776082305,11.73219964,270.0383021,4,8.294425408,335.3223613,
             14.06040142,2.423340019,126.7205863,70.53780982,21.3328554,225.2711962,92.25113066,193.0151362,3.775394142,
             95.3786641,17.86333041],

      'WIN_LOSE':[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0]}

df = pd.DataFrame(data, columns=['EVENT_ID', 'SELECTION_ID', 'BSP','WIN_LOSE'])

df.set_index(['EVENT_ID', 'SELECTION_ID'], inplace=True)
df.sortlevel(level=0, ascending=True, sort_remaining=True)

df = pd.DataFrame(data, columns=['EVENT_ID', 'SELECTION_ID', 'BSP','WIN_LOSE'])
df = df.sort_values(["EVENT_ID","BSP"])
df.set_index(['EVENT_ID', 'SELECTION_ID'], inplace=True)

df['Win_Percentage'] = 1/df['BSP']

df['Lose_Percentage'] = 1 - df['Win_Percentage']

Для каждого EVENT_ID, так что уровень индекса равен нулю, я хотел бы подогнать уравнение линии, экспоненты, мощности и лога на основе столбца Lose_Percentage.

Таким образом, выделенные линии для EVENT_ID 112335580 будут основаны на точках (1, 0,750000), (2, 0,803181), (3, 0,843129), (4, 0,849658), (5, 0,871401), (6, 0,914764)(7, 0,959506), (8, 0,996297).Затем это будет сделано для всех других индексов EVENT_ID.

Чтобы попытаться это сделать, я хочу преобразовать столбец Lose_Percentage в массив для каждого EVENT_ID.Для этого я попробовал следующее: я хочу преобразовать столбец Lose_Percentage в массив для каждого EVENT_ID.Чтобы сделать это, я попробовал следующее:

df["Lose_Percentage"][112335580].tolist()

Я не хочу просто обращаться к одному, я хочу получить доступ к каждому значению в столбце Lose_Percentage для каждого EVENT_ID и передать этот списокфункция.

Чтобы поместить строку в данные, я могу использовать polyfit.Поэтому мне нужно будет передать массив в это.

Кроме того, я посмотрел, как я могу уместить журнал, мощность и экспоненциальную линию, но не могу найти функцию, которая может сделать это

Любая помощь будет оценена, ура.

Сэнди

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Нет необходимости извлекать значения.Сначала вы определяете функцию, которая подходит и оценивает

def fit_eval(df):
    y = df.values
    x = np.arange(0, len(y)) + 1
    z = np.polyfit(x, y, 1)
    p = np.poly1d(z)
    return p(x)

Эта функция может использоваться в группе:

df['fit'] = df.groupby(level=0)['Lose_Percentage'].transform(fit_eval)
0 голосов
/ 28 февраля 2019

Вы можете выбрать необходимый список, используя loc -

extract = pd.Series(df.loc[112335580]["Lose_Percentage"])
extract.reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...