簡體   English   中英

Python Panda 獲取 xy 坐標的單元格值

[英]Python Panda get value of cell with x y coordinates

我想使用 Pandas 來存儲關於我的汽車的值。 我可以使用 Pivot 命令在坐標系中查看信息,但每個 Pivot 只有一種信息。 我還希望能夠快速獲取值,例如使用 class (cars.[x][y].x_goal)。 我該怎么做呢? 或者有沒有更好的方法來存儲這樣的協調系統信息? 這是我嘗試過的。 最后的 print(result) 不起作用。

import pandas as pd

cars = pd.DataFrame({'x': [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4],
                     'y': [1, 2, 3, 4, 1, 3, 1, 2, 3, 1, 2, 3],
                     'x_goal': [55, 5, 4, 10, 2, 2, 3, 31, 33, 41, 42, 34],
                     'y_goal': [3, 1, 10, 2, 12, 31, 3, 13, 4, 4, 4, 18]})

print('x_goal')
print(cars.pivot('x','y','x_goal').values)
     [[55.  5.  4. 10.]
      [ 2. nan  2. nan]
      [ 3. 31. 33. nan]
      [41. 42. 34. nan]]

print('y_goal')
print(cars.pivot('x','y','y_goal').values)
      [[ 3.  1. 10.  2.]
      [12. nan 31. nan]
      [ 3. 13.  4. nan]
      [ 4.  4. 18. nan]]


print('x_goal at 2,3')
df_filt = cars[cars['x'] == 2 & cars['y'] == 3]
result = df_filt.get_value(df_filt.index[0],'VALUE')
print(result)

您可以直接從數據框中獲取結果,如下所示:

result = cars[(cars['x']==2) & ((cars['y']==3))]['x_goal']
print(result)

或者更好,正如@S3DEV 在評論中所建議的那樣:

result = cars.loc[((cars['x']==2) & (cars['y']==3)), 'x_goal']

如果您想使用 pivot:

pivot = cars.pivot_table(index='x', columns='y', values='x_goal')
result2 = pivot.loc[2,3]
print(result2)

您還可以使用查詢:

result3 = cars.query('x == 2 & y == 3')['x_goal']
print(result3)

我會使用字典而不是使用 pandas 來構造它。 我的示例允許您在恆定時間內查找任何 xy 坐標的 x 和 y 目標。 您可以通過使用iterrowsitertuples對其進行迭代,輕松地從 pandas dataframe 構造相同的字典。

將浮點數用於坐標將無法正常工作 - 由於浮點精度有限會引入錯誤,因此通常不應將浮點數用於字典鍵。 你有 int 坐標,所以一切都很好。

您還可以將x_goaly_goal存儲為 2D numpy arrays 並訪問諸如x_goal_np_array[x, y]類的值。 這也將是恆定的時間。 您的代碼已經生成了這些 arrays。

car_data = {
    'x': [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4],
    'y': [1, 2, 3, 4, 1, 3, 1, 2, 3, 1, 2, 3],
    'x_goal': [55, 5, 4, 10, 2, 2, 3, 31, 33, 41, 42, 34],
    'y_goal': [3, 1, 10, 2, 12, 31, 3, 13, 4, 4, 4, 18],
}

n_cars = len(car_data["x"])

# sanity check that all lists in car_data is same length:
assert all(len(v) == n_cars for v in car_data.values())

car_map = {}
for i in range(n_cars):
    x, y = car_data["x"][i], car_data["y"][i]
    x_goal, y_goal = car_data["x_goal"][i], car_data["y_goal"][i]
    car_map[(x, y)] = {"x_goal": x_goal, "y_goal": y_goal}

from pprint import pprint
pprint(car_map)
# Get x and y goal for car at (x, y) = (4, 1) in constant time.
print(car_map[(4, 1)]["x_goal"])
print(car_map[(4, 1)]["y_goal"])

output:

{(1, 1): {'x_goal': 55, 'y_goal': 3},
 (1, 2): {'x_goal': 5, 'y_goal': 1},
 (1, 3): {'x_goal': 4, 'y_goal': 10},
 (1, 4): {'x_goal': 10, 'y_goal': 2},
 (2, 1): {'x_goal': 2, 'y_goal': 12},
 (2, 3): {'x_goal': 2, 'y_goal': 31},
 (3, 1): {'x_goal': 3, 'y_goal': 3},
 (3, 2): {'x_goal': 31, 'y_goal': 13},
 (3, 3): {'x_goal': 33, 'y_goal': 4},
 (4, 1): {'x_goal': 41, 'y_goal': 4},
 (4, 2): {'x_goal': 42, 'y_goal': 4},
 (4, 3): {'x_goal': 34, 'y_goal': 18}}
41
4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM