【问题标题】:Optimize by Grouping using Pandas使用 Pandas 通过分组进行优化
【发布时间】:2019-08-19 23:37:01
【问题描述】:

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 行包含一个完整的分组。对于所有没有位置 row == 6 的分组,除了 ["Ode"] 下的分组总值之外,我还想取 ["Proceeds"]column 中的金额,并创建一个“delta”列显示为了使["Weighting"] 列尽可能接近目标而应进行的更改。

【问题讨论】:

  • 我们应该在最后 6 列中放什么? NaN 可以吗?您能否显示预期的结果,至少对于一些示例行?
  • @pythonic833 我添加了最后一列以及这些行的预期结果。我希望“Additions”行获取每个“Pos”的值以及“Proceeds”,然后将“Target”应用于该值以得出值。我还想看看是否有人知道如何将行添加到少于 6 行的每个组中。有什么想法吗?
  • @JoshPilson 你怎么知道其他职位的target?你能举个例子,比如位置 3 吗?
  • 所以我的信息留下了一些不足之处.. 对此感到抱歉...如果您查看 ["Pos"] 中的不同条目,每个职位的目标都在 [ “目标”] 所以对于“FPE”,目标是 0.1,对于 HFA,目标是 0.2,依此类推。 ["Positions"] 是 ["Pos"] 的计数,我想从 ["Positions"]

标签: python-3.x pandas optimization


【解决方案1】:

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

【讨论】:

  • 谢谢!您是否认为有一种方法可以扩展并为 ["Positions"]
  • 您的预期输出是什么样的?
  • 请参阅我在下面添加的部分以及输出。谢谢!
  • 57560303 是新问题。感谢您的反馈!
猜你喜欢
  • 1970-01-01
  • 2022-01-07
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多