通过使用熊猫分组进行优化

时间:2019-08-14 22:42:34

标签: python-3.x pandas optimization

C

Ode  Proceeds   Pos   Amount       Positions   Target   Weighting   Addition
676  30160      FPE   51741.25     5           0.1      0.187636
676  30160      HFA   57299.63616  5           0.2      0.2077939
676  30160      PFL   60437.40563  5           0.2      0.2191728
676  30160      PSO   53053.5741   5           0.15     0.1923958
676  30160      RNS   53220.36636  5           0.2      0.1930006
953  34960      PFL   8506.1939    1           0.2      1
637  14750      PFL   8341.21701   3           0.2      0.3025169
637  14750      PSO   12669.65078  3           0.15     0.4594993
637  14750      RNS   6561.85824   3           0.2      0.2379836
673  12610      FPE   31220.475    5           0.1      0.1750410
673  12610      HFA   34020.2928   5           0.2      0.1907384
673  12610      PFL   37754.00236  5           0.2      0.2116719
673  12610      PSO   31492.56779  5           0.15     0.1765665
673  12610      RNS   43873.58472  5           0.2      0.2459820
318  93790      PFL   59859.3918   2           0.2      0.2852660
318  93790      PSO   149977.7109  2           0.15     0.7147339
222  75250      FPE   21000        6           0.1      0.1         7525
222  75250      HFA   42000        6           0.2      0.2         15050
222  75250      PFL   42000        6           0.2      0.2         15050
222  75250      PSO   31500        6           0.15     0.15        11287.5
222  75250      RNS   42000        6           0.2      0.2         15050
222  75250      CRD   31500        6           0.15     0.15        11287.5

最后6行包含一个完整的分组。对于所有没有排名行== 6的分组,除了["Proceeds"]下分组的总价值外,我还想获取["Ode"]列中的金额,并创建一个“增量”列,其中显示了要使["Weighting"]列尽可能接近目标的更改。

1 个答案:

答案 0 :(得分:2)

IIUC,您可以使用:

m = df.groupby('Ode')['Positions'].transform(lambda x: (x == 6).any())
df.loc[m, 'Additions'] = df['Proceeds'] * df['Weighting']
print(df)

输出:

    Ode  Proceeds  Pos        Amount  Positions  Target  Weighting  Additions
0   676     30160  FPE   51741.25000          5    0.10   0.187636        NaN
1   676     30160  HFA   57299.63616          5    0.20   0.207794        NaN
2   676     30160  PFL   60437.40563          5    0.20   0.219173        NaN
3   676     30160  PSO   53053.57410          5    0.15   0.192396        NaN
4   676     30160  RNS   53220.36636          5    0.20   0.193001        NaN
5   953     34960  PFL    8506.19390          1    0.20   1.000000        NaN
6   637     14750  PFL    8341.21701          3    0.20   0.302517        NaN
7   637     14750  PSO   12669.65078          3    0.15   0.459499        NaN
8   637     14750  RNS    6561.85824          3    0.20   0.237984        NaN
9   673     12610  FPE   31220.47500          5    0.10   0.175041        NaN
10  673     12610  HFA   34020.29280          5    0.20   0.190738        NaN
11  673     12610  PFL   37754.00236          5    0.20   0.211672        NaN
12  673     12610  PSO   31492.56779          5    0.15   0.176566        NaN
13  673     12610  RNS   43873.58472          5    0.20   0.245982        NaN
14  318     93790  PFL   59859.39180          2    0.20   0.285266        NaN
15  318     93790  PSO  149977.71090          2    0.15   0.714734        NaN
16  222     75250  FPE   21000.00000          6    0.10   0.100000     7525.0
17  222     75250  HFA   42000.00000          6    0.20   0.200000    15050.0
18  222     75250  PFL   42000.00000          6    0.20   0.200000    15050.0
19  222     75250  PSO   31500.00000          6    0.15   0.150000    11287.5
20  222     75250  RNS   42000.00000          6    0.20   0.200000    15050.0
21  222     75250  CRD   31500.00000          6    0.15   0.150000    11287.5