访问不同级别的多级索引,然后将该索引的列转换为数组,然后传递给函数

时间:2019-02-28 08:30:34

标签: python pandas indexing

我有数据框。可以在下面看到一个摘要:

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的{​​{1}}列中的每个值,并将此列表传递给一个函数。

要使一行适合数据,我可以使用polyfit。所以我需要将数组传递给它。

此外,我看了看如何适应对数,幂和指数行,但找不到能做到这一点的函数

任何帮助,不胜感激。

桑迪

2 个答案:

答案 0 :(得分:1)

没有必要提取值。首先,您定义一个适合并求值的函数

import cv2
im_A = cv2.imread(path_A, cv2.CV_LOAD_IMAGE_COLOR)

此功能可以分组使用:

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)

答案 1 :(得分:0)

您可以使用loc-

选择所需的列表
extract = pd.Series(df.loc[112335580]["Lose_Percentage"])
extract.reset_index()