【问题标题】:How do I compare the two data frames and get the values?如何比较两个数据框并获取值?
【发布时间】:2021-02-22 22:43:47
【问题描述】:

x数据框是出发和到达信息,y数据框是每个位置的经纬度数据。

我尝试使用起点和终点的纬度和经度数据(例如,start_x、start_y、end_x、end_y)来计算起点和终点之间的距离。

如何连接 x 和 y 以将适合每个代码的纬度数据带入 x 数据框?

【问题讨论】:

  • 您是想在第一个数据框中添加新列,开始和结束,还是只关心结果距离?
  • 两者。但我正在考虑在 Python 中应用港口正弦公式,首先,我想在 x 数据框中添加列 start_x、start_y、end_x 和 end_y。
  • 我现在无法进行任何测试,但我会尝试类似:x["start_x"] = y.loc[y.code == x.start].x 等等下一个..
  • 它可能不起作用,但它是一个开始:p 我希望我在我的电脑前!
  • x["start_x"] = y.loc[y['code'] == x['start']] 我是这样写的,我得到一个像 ValueError: Can only compare标记相同的系列对象

标签: python dataframe


【解决方案1】:

符号有点混乱,但我是在问题的符号之后使用的。

一种方法是将您的数据框合并到一个新的中,如下所示:

虚拟数据帧:

import pandas as pd

x=[300,500,300,600,700]
y=[400,400,700,700,400]

code=[300,400,500,600,700]

start=[100,101,102,103,104]

end=[110,111,112,113,114]

x={"x":x, "y":y}

y={"code":code, "start":start, "end":end}

x=pd.DataFrame(x)

y=pd.DataFrame(y)

这给出了:

x
x y
0 300 400
1 500 400
2 300 700
3 600 700
4 700 400
y
code start end
0 300 100 110
1 400 101 111
2 500 102 112
3 600 103 113
4 700 104 114

解决办法:

df = pd.merge(x,y,left_on="x",right_on="code").drop("code",axis=1)

df
x y start end
0 300 400 100 110
1 300 700 100 110
2 500 400 102 112
3 600 700 103 113
4 700 400 104 114
df = df.merge(y,left_on="y",right_on="code").drop("code",axis=1)

df
x y start_x end_x start_y end_y
0 300 400 100 110 101 111
1 500 400 102 112 101 111
2 700 400 104 114 101 111
3 300 700 100 110 104 114
4 600 700 103 113 104 114

快速解释:

df = pd.merge(...) 行通过合并“x”列的左侧 (x) 和“code”列的右侧 (x) 来创建新数据框。第二行 df = df.merge(...) 将现有的df作为左侧,并使用其列“y”来合并y数据帧中的“code”列。

.drop("code",axis=1) 用于删除合并产生的不需要的“code”列。

在合并具有相同列名的数据框时,会自动添加 _x 和 _y 后缀。要控制它,在调用第二次合并时使用“suffixe=..”选项(当合并同名列时)。在这种情况下,它可以在默认设置下正常工作,因此如果您使用 x 作为右侧数据帧和 y 作为左侧数据帧,则无需为此烦恼。

【讨论】:

  • 我会试试的。我认为它会起作用。非常感谢。
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多