我使用loc语句来查找坐标对的每个值,但是显然,如果你使用带有条件的loc语句,它会返回一个序列,而不是单个值。我的条件是我应该总是只返回一个值,但是当我将它赋给它的字段时,我总是在语句的'except'部分结束。我该如何使它工作呢?
我的情况如下:我有一个 Dataframe ,其中包含一系列拥有点(由x,y坐标定义)。对于每一行,我有以下字段:
Possession | PossessionSequence | x_from | y_from
-----------+--------------------+--------+-------
1 1 12 24
1 2 89 45
1 3 67 80
1 4 110 72
2 1 23 79
2 2 32 93
现在,我想将x_to和y_to字段添加到此 Dataframe 中,其中第一条记录中这些字段的值是第二条记录中的x_from和y_from。第二条记录中的x_to和y_to是第三条记录中的x_from和y_from,以此类推。因此,在一个所有权中,我总是需要从下一个所有权序列中获取值。因此,我想获得以下内容:
Possession | PossessionSequence | x_from | y_from | x_to | y_to
-----------+--------------------+--------+--------+------+------
1 1 12 24 89 45
1 2 89 45 67 80
1 3 67 80 110 72
1 4 110 72
2 1 23 79 23 79
2 2 32 93
现在,当我到达possession序列的最后一个值时(例如,在上面的 Dataframe 中,4代表possession 1),没有下一条记录(如图所示,x_to和y_to值应该保留为空),因此我用try... except语句 Package 了这些行,以便在没有找到下一行时,分配空白。
到目前为止,我已经编写了以下代码:
# Add the TO x,y coordinates to each line (except the last one)
df['X_to'] = 0
df['Y_to'] = 0
for index, row in df.iterrows():
current_team = df.loc[index, 'Team']
current_posession = df.loc[index, 'Posession']
current_sequence = df.loc[index, 'PosSeq']
try:
df.loc[index, 'X_to'] = df.loc[(df['Team'] == current_team) & (df['Posession'] == current_posession) & (df['PosSeq'] == current_sequence + 1), 'X_from']
df.loc[index, 'Y_to'] = df.loc[(df['Team'] == current_team) & (df['Posession'] == current_posession) & (df['PosSeq'] == current_sequence + 1), 'Y_from']
except:
df.loc[index, 'X_to'] = ""
df.loc[index, 'Y_to'] = ""
但是当我运行这个函数时,它总是在“except”部分结束,并且没有分配“to”坐标。我试图熟悉Visual Studio代码中的调试模式,在那里我看到查找“to”坐标的loc语句得到了正确的值,但是只作为一个系列的一部分,第一个元素是for循环中当前迭代的元素。我怎样才能从中只提取坐标值呢?欢迎所有的帮助!!
1条答案
按热度按时间iszxjhcz1#
很抱歉给您添麻烦了......它就像在有问题的行中添加.values[0]一样简单(并使用正确的数据类型预先定义列)。