Python 来自不同数据帧的总和值

Python 来自不同数据帧的总和值,python,group-by,conditional-statements,Python,Group By,Conditional Statements,我有以下数据帧: print(X) Quantity Class 1 0 5 0 6 1 8 2 9 3 0 4 ... print(dframe) Pred_class Delta 0 -0.046348 1 1.856508 2 20.347518

我有以下数据帧:

print(X)

Quantity   Class    
   1         0
   5         0
   6         1
   8         2
   9         3
   0         4
...

print(dframe)

   Pred_class    Delta
           0  -0.046348
           1   1.856508
           2  20.347518
           3  -7.138728
           4   6.642686
我想为每个类别的X-“Final_Q”-X[“Quantity”]和相应的“Delta”之和创建一个附加列:

打印(X)

我试过:

for i in np.unique(X["Class"]):

        #Isolate     
        X["Class"] == i
        dframe["Pred_class"] == i

        X_test_virtuale["BOOST"] = X_test_virtuale["ALG_N_forecast"] - dframe.iloc[0,0]

但它似乎不能正常工作

如果我理解正确,首先要合并:

 X = X.merge(dframe, how='left', left_on='Class', right_on='Pred_class')
然后,您只需按常规添加:

 X['Final_Q'] = X['Quantity'] + X['Delta']
这将为您带来:

   Class  Quantity      Delta  Pred_class    Final_Q
0      0         1  -0.046348           0   0.953652
1      0         5  -0.046348           0   4.953652
2      1         6   1.856508           1   7.856508
3      2         8  20.347518           2  28.347518
4      3         9  -7.138728           3   1.861272
5      4         0   6.642686           4   6.642686

重命名
Pred\u类后,可以使用pandas merge\u asof,如下所示


dframe=dframe.rename(列={'Pred_class':'class'})
s=pd.merge\u asof(X,dframe,on='Class')
s['FinalQ']=s['Quantity']-s['Class']

索引数量类Delta FinalQ
0         1      0  -0.04       1
1         5      0  -0.04       5
2         6      1   1.90       5
3         8      2  20.30       6
4         9      3  -7.00       6
5         0      4   6.60      -4

它应该是“-X['Delta']”而不是“+”;其余的都很好用
   Class  Quantity      Delta  Pred_class    Final_Q
0      0         1  -0.046348           0   0.953652
1      0         5  -0.046348           0   4.953652
2      1         6   1.856508           1   7.856508
3      2         8  20.347518           2  28.347518
4      3         9  -7.138728           3   1.861272
5      4         0   6.642686           4   6.642686