python - 按值比较数据帧

标签 python pandas

我有两个带有几何测量值的文件: 每个文件包含大量点(由 x、y 和 z 定义)

我想比较水平坐标相同的深度(z值)(df1['x'] == df2['x']) & (df1['y'] = = df2['y'])。然而,两个文件中水平坐标的顺序可能不同。示例数据:

x1   y1   z1
1    1    1.5
1    2    0.5
2    1    0.2
2    2    2.2
3    1    0.6
3    2    0.7

x2   y2   z2
2    1    0.5
2    2    0.2
2    3    0.5
1    1    0.1
1    2    2.3
1    3    1.7

我想要一个像这样的结果数据框(z1 - z2,其中x和y匹配):

x    y    z
1    1    1.4
1    2    -1.8
2    1    -0.3
2    2    2.0

我该如何实现这个目标?

最佳答案

您可以合并然后减去:

In [67]:
merged = df.merge(df1, left_on=['x1','y1'], right_on=['x2','y2'])
merged['z'] = merged['z1'] - merged['z2']
merged.drop(['x2','y2','z1','z2'],axis=1,inplace=True)
merged = merged.rename(columns={'x1':'x','y1':'y'})
merged

Out[67]:
   x  y    z
0  1  1  1.4
1  1  2 -1.8
2  2  1 -0.3
3  2  2  2.0

如果您合并,它将执行内部类型合并,因此只有在值匹配并删除所有无关行的情况下,您才可以执行减法,然后删除/重命名列以获得所需的结果

关于python - 按值比较数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37676257/

相关文章:

python - 基于条件的新列

python - Apache Spark : Can't use Matplotlib on Jupyter Notebook

python - 如何在 python 中检查页面是否基于 html5?

python - 在 odoo 10 中解析 xml View 时出错

python - 使用OpenCV + Python拼接四个图像

python - 从 shell 到 jupyter 笔记本单元的管道

python - Pandas 将值添加到数据框中

python - 从数据框中删除列中以 "@"开头的单词

python - Tensorflow 模型适用于 Python 但不适用于 C++

python - 来自一组列的 Seaborn 热图?