这是我的数据帧
df = pd.DataFrame({'Id': [102,103,104,303,305],'ExpG_Home':[1.8,1.5,1.6,1.8,2.9],
'ExpG_Away':[2.2,1.3,1.2,2.8,0.8],
'HomeG_Time':[[93, 109, 187],[169], [31, 159],[176],[16, 48, 66, 128]],
'AwayG_Time':[[90, 177],[],[],[123,136],[40]]})
首先,我需要创建一个数组y
,对于给定的Id号,它从同一行(ExpG_Home & ExpG_Away
)获取值。你知道吗
y = [1 - (ExpG_Home + ExpG_Away), ExpG_Home, ExpG_Away]
其次,我发现这要困难得多,对于创建y
时使用的Id,下面的函数从HomeG_Time & AwayG_Time
获取相应的列表并创建一个数组。不幸的是,我的函数一次占用一行。我需要对一个大的数据集这样做。你知道吗
x1 = [1,0,0]
x2 = [0,1,0]
x3 = [0,0,1]
total_timeslot = 200 # number of timeslot per game.
k = 1 # constant
#For Id=102 with ExpG_Home=2.2 and ExpG_Away=1.8
HomeG_Time = [93, 109, 187]
AwayG_Time = [90, 177]
y = np.array([1-(2.2 + 1.8)/k, 2.2/k, 1.8/k])
# output of y = [0.98 , 0.011, 0.009]
def squared_diff(x1, x2, x3, y):
ssd = []
for k in range(total_timeslot):
if k in HomeG_Time:
ssd.append(sum((x2 - y) ** 2))
elif k in AwayG_Time:
ssd.append(sum((x3 - y) ** 2))
else:
ssd.append(sum((x1 - y) ** 2))
return ssd
sum(squared_diff(x1, x2, x3, y))
Out[37]: 7.880400000000012
此输出仅用于第一行。你知道吗
下面是完整的片段
假设是这样。使用pandas.DataFrame.apply计算y作为(N,3)
现在计算给定x的平方误差
在您的例子中,如果
error2
是squared_diff(x2,y)
,那么您要添加HomeG_Time
的发生次数最后的误差平方和是(根据你的计算)
试试这个
输出:
相关问题 更多 >
编程相关推荐