python-3.x loc语句返回一系列值,而我需要单个值

beq87vna  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(148)

我使用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循环中当前迭代的元素。我怎样才能从中只提取坐标值呢?欢迎所有的帮助!!

iszxjhcz

iszxjhcz1#

很抱歉给您添麻烦了......它就像在有问题的行中添加.values[0]一样简单(并使用正确的数据类型预先定义列)。

相关问题