[英]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 目標。 您可以通過使用iterrows
或itertuples
對其進行迭代,輕松地從 pandas dataframe 構造相同的字典。
將浮點數用於坐標將無法正常工作 - 由於浮點精度有限會引入錯誤,因此通常不應將浮點數用於字典鍵。 你有 int 坐標,所以一切都很好。
您還可以將x_goal
和y_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.