gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:17:02 25 4
gpt4 key购买 nike

我有数据框。下面是一个片段:

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()

我不想只访问一个,我想访问每个 EVENT_IDLose_Percentage 列中的每个值,并将此列表传递给函数。

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

此外,我还研究过如何拟合对数、幂和指数线,但找不到可以执行此操作的函数

任何帮助将不胜感激,干杯。

桑迪

最佳答案

无需提取值。首先,您定义一个拟合和评估的函数

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)

这个函数可以在groupy中使用:

df['fit'] = df.groupby(level=0)['Lose_Percentage'].transform(fit_eval)

关于python - 访问不同级别的多级索引,然后将该索引的列转换为数组,然后传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54921332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com