我有以下数据帧df_shots
:
TableIndex MatchID GameWeek Player ... ShotPosition ShotSide Close Position
ShotsDetailID ...
6 5 46605 1 Roberto Firmino ... very close range N/A close very close rangeN/A
8 7 46605 1 Roberto Firmino ... the box the centre not close the boxthe centre
10 9 46605 1 Roberto Firmino ... the box the left not close the boxthe left
17 16 46605 1 Roberto Firmino ... the box the centre close the boxthe centre
447 446 46623 2 Roberto Firmino ... the box the centre close the boxthe centre
... ... ... ... ... ... ... ... ... ...
6656 6662 46870 27 Roberto Firmino ... very close range N/A close very close rangeN/A
6666 6672 46870 27 Roberto Firmino ... the box the right not close the boxthe right
6674 6680 46870 27 Roberto Firmino ... the box the centre not close the boxthe centre
6676 6682 46870 27 Roberto Firmino ... the box the left not close the boxthe left
6679 6685 46870 27 Roberto Firmino ... outside the box N/A not close outside the boxN/A
为清楚起见,所有可能的“位置”值为:
positions = ['a difficult anglethe left',
'a difficult anglethe right',
'long rangeN/A',
'long rangethe centre',
'long rangethe left',
'long rangethe right',
'outside the boxN/A',
'penaltyN/A',
'the boxthe centre',
'the boxthe left',
'the boxthe right',
'the six yard boxthe left',
'the six yard boxthe right',
'very close rangeN/A']
现在,我想将以下x/y值映射到每个“位置”名称,并将该值存储在新的“位置XY”列下:
the_boxthe_center = {'y':random.randrange(25,45), 'x':random.randrange(0,6)}
the_boxthe_left = {'y':random.randrange(41,54), 'x':random.randrange(0,16)}
the_boxthe_right = {'y':random.randrange(14,22), 'x':random.randrange(0,16)}
very_close_rangeNA = {'y':random.randrange(25,43), 'x':random.randrange(0,4)}
six_yard_boxthe_left = {'y':random.randrange(33,43), 'x':random.randrange(4,6)}
six_yard_boxthe_right = {'y':random.randrange(25,33), 'x':random.randrange(4,6)}
a_diffcult_anglethe_left = {'y':random.randrange(43,54), 'x':random.randrange(0,6)}
a_diffcult_anglethe_right = {'y':random.randrange(14,25), 'x':random.randrange(0,6)}
penaltyNA = {'y':random.randrange(36), 'x':random.randrange(8)}
outside_the_boxNA = {'y':random.randrange(14,54), 'x':random.randrange(16,28)}
long_rangeNA = {'y':random.randrange(0,68), 'x':random.randrange(40,52)}
long_rangethe_centre = {'y':random.randrange(0,68), 'x':random.randrange(28,40)}
long_rangethe_right = {'y':random.randrange(0,14), 'x':random.randrange(0,24)}
long_rangethe_left = {'y':random.randrange(54,68), 'x':random.randrange(0,24)}
我试过:
if df_shots['Position']=='very close rangeN/A':
df_shots['Position X/Y']==very_close_rangeNA
...# and so on
但我得到:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我该怎么做
在一个容器外存储这么多相关变量是一种糟糕的形式,让我们使用映射到数据帧的字典
下面是一些代码,它们可能会达到您想要的效果
首先创建一个列表,列出你所有的“位置XY”,如
以及相应的
positions
列表(如您已经拥有的) 然后我建议你做一个字典,这样每个位置都会进行相应的位置xy计算然后在数据框中创建一个新列,在其中根据位置存储x,y值
现在一行一行地遍历所有行
这应该可以做到:)
下面是一些示例代码,可以实现您想要的功能。我创建了一个基本的df_快照模型,但是在更大的数据帧上应该运行相同的模型。我还将一些自由变量存储在
dict
中,以简化筛选应该注意的是,因为预先计算了
positions_xy
的随机值,所以每个放炮位置的所有x/y值都是相同的。这可能不是你想要的产出:
相关问题 更多 >
编程相关推荐