由值

2016-06-07 48 views
1

我有幾何測量比較兩個文件dataframes: 每個文件包含大量的點(用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 

我將如何做到這一點?

回答

1

可以merge,然後減去:

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 

如果你merge會執行inner類型合併所以只有當值匹配,並丟棄所有多餘的行,您可以執行減法,然後刪除/重命名獲得理想結果的列