如何在python中使用基于两个数据帧的自定义计算

时间:2017-12-10 06:25:54

标签: python pandas numpy dataframe

我有2个数据帧,如下所示,

DF1

index   X1  X2  X3  X4
0   6   10  6   7
1   8   9   11  13
2   12  13  15  11
3   8   11  7   6
4   11  7   6   6
5   13  14  11  10

DF2

index   Y
0   20
1   14
2   17
3   14
4   15
5   20

我想获得第3个数据帧,以便新X(i)= Y - (Y / X(i))

index   X1  X2  X3  X4
0   16.67   18.00   16.67   17.14
1   12.25   12.44   12.73   12.92
2   15.58   15.69   15.87   15.45
3   12.25   12.73   12.00   11.67
4   13.64   12.86   12.50   12.50
5   18.46   18.57   18.18   18.00

请注意,计算时它应与df1和df2的索引号相匹配。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将numpy用于矢量化解决方案,即

df[df.columns] = (df2.values - df2.values/df.values)

           X1         X2         X3         X4
index                                            
0      16.666667  18.000000  16.666667  17.142857
1      12.250000  12.444444  12.727273  12.923077
2      15.583333  15.692308  15.866667  15.454545
3      12.250000  12.727273  12.000000  11.666667
4      13.636364  12.857143  12.500000  12.500000
5      18.461538  18.571429  18.181818  18.000000

答案 1 :(得分:1)

基于pandas

-(1/df1.div(df2.Y,0)).sub(df2.Y,0)
Out[634]: 
              X1         X2         X3         X4
index                                            
0      16.666667  18.000000  16.666667  17.142857
1      12.250000  12.444444  12.727273  12.923077
2      15.583333  15.692308  15.866667  15.454545
3      12.250000  12.727273  12.000000  11.666667
4      13.636364  12.857143  12.500000  12.500000
5      18.461538  18.571429  18.181818  18.000000