如何将行值保留到另一个数据帧的第n个行值中

问题描述 投票:0回答:2

我有这两个df

 df1:
    lon                  lat
 0  -60.7               -2.8333333333333335
 1  -55.983333333333334 -2.4833333333333334
 2  -51.06666666666667  -0.05
 3  -66.96666666666667  -0.11666666666666667
 4  -48.483333333333334 -1.3833333333333333
 5  -54.71666666666667  -2.4333333333333336
 6  -44.233333333333334 -2.6
 7  -59.983333333333334 -3.15

 df2:
      lon          lat  
 0  -24.109     -2.0035
 1  -17.891     -1.70911
 2  -14.5822    -1.7470700000000001
 3  -12.8138    -1.72322
 4  -14.0688    -1.5028700000000002
 5  -13.8406    -1.44416
 6  -12.1292    -0.671266
 7  -13.8406    -0.8824270000000001
 8  -15.12      -18.223

我想让df1 ['lat']的每个值都与df2的所有值保持一致像这样的东西:

results0=df1.loc[0,'lat']-df2.loc[:,'lat']
results1=df1.loc[1,'lat']-df2.loc[:,'lat']
#etc etc....

所以我尝试了这个:

for i,j in zip(range(len(df1)), range(len(df2))):
exec(f"result{i}=df1.loc[{i},'lat']-df2.loc[{j},'lat']")

但是它给我每个结果一个结果值,而不是每个结果8个值。我将不胜感激任何可能的解决方案。谢谢!

python pandas exec
2个回答
0
投票

由于df1比df2少一行

df1['lat'] = df1['lat'] - df2.loc[:df1.shape[0]-1, 'lat']

输出:

0   -0.829833
1   -0.774223
2    1.697070
3    1.606553
4    0.119537
5   -0.989173
6   -1.928734
7   -2.267573
Name: lat, dtype: float64

0
投票

您可以创建Series的列表:

L = [df1.loc[i,'lat']-df2['lat'] for i in df1.index]

或者您可以将numpy用于新的DataFrame

arr = df1['lat'].to_numpy()  -df2['lat'].to_numpy()[:, None]
df3 = pd.DataFrame(arr, index=df2.index, columns=df1.index)
print (df3)
           0          1          2          3          4          5  \
0  -0.829833  -0.479833   1.953500   1.886833   0.620167  -0.429833   
1  -1.124223  -0.774223   1.659110   1.592443   0.325777  -0.724223   
2  -1.086263  -0.736263   1.697070   1.630403   0.363737  -0.686263   
3  -1.110113  -0.760113   1.673220   1.606553   0.339887  -0.710113   
4  -1.330463  -0.980463   1.452870   1.386203   0.119537  -0.930463   
5  -1.389173  -1.039173   1.394160   1.327493   0.060827  -0.989173   
6  -2.162067  -1.812067   0.621266   0.554599  -0.712067  -1.762067   
7  -1.950906  -1.600906   0.832427   0.765760  -0.500906  -1.550906   
8  15.389667  15.739667  18.173000  18.106333  16.839667  15.789667   

           6          7  
0  -0.596500  -1.146500  
1  -0.890890  -1.440890  
2  -0.852930  -1.402930  
3  -0.876780  -1.426780  
4  -1.097130  -1.647130  
5  -1.155840  -1.705840  
6  -1.928734  -2.478734  
7  -1.717573  -2.267573  
8  15.623000  15.073000  
© www.soinside.com 2019 - 2024. All rights reserved.