【发布时间】:2020-09-01 12:41:59
【问题描述】:
提前道歉,因为从技术上讲,我对我想用 python 解决的问题有几个问题,但由于它们是相关的,所以我将它们全部放在一篇文章中(至少我希望这对任何人来说都是一个值得挑战能帮我解决这个问题)。
我有以下名为 df 示例的 pandas 数据框:
REF Period Product Price Type QTY
T001 Jan-20 EQ 69.87 Sell -10
T001 Feb-21 EQ 69.77 Buy 10
T002 Apr-20 BN 10.77 Buy 15
T003 Jul-20 EQ 71.25 Sell -20
T003 Aug-20 EQ 70.89 Buy 40
T003 Sep-20 EQ 70.69 Sell -20
T004 Nov-20 BN 20.83 Buy 10
T004 Dec-20 EQ 40.01 Sell 12
T005 Sep-20 FD 31.25 Buy -20
T005 Mar-21 FD 36.89 Sell 40
T005 Sep-21 FD 40.69 Buy -20
如您所见,REF 列指的是我要分析的投资组合的交易参考。
我一直在努力寻找解决以下数据分析问题的方法:
我希望 python 遍历交易参考列的每一行并且:
-
添加一列
TRADE_TYPE和DIRECTION(这部分我当然已经介绍过了) -
如果
REF是唯一的(列中没有重复项),则TRADE_TYPE应该是 = "Flat" + df[Period](即 "Flat Apr-20")并且DIRECTION应该是 = df[该行的类型] -
如果
REF在两行中相同,Product在这些行中相同,Period在这些行中不同,Type不同(一个是卖出,另一个是买入)然后这些行中的TRADE_TYPE应该 = "Spread" 并且DIRECTION应该等于第一行的类型(即,如果 2 的第一行说 Sell,那么它就是 Sell,反之亦然) -
如果
REF在 3 行中相同,Product在这些行中相同,Period在这些行中不同,并且这些行的QTY之和等于零,则 @987654339 @ 应该是 = "Trio" 和DIRECTION应该等于第一行的类型(即如果 3 的第一行是 SELL,第二行是 BUY,第三行是 SELL,那么它应该选择第一行的值) -
如果
REF在 2 行中相同,但Product不同,则TRADE_TYPE应为 = "Arbitrage" 且DIRECTION应等于第一行的Type(即,如果2 的第一行说 Sell 然后是 Sell,反之亦然)
如果以上表为例,最终结果应该是这样的:
REF Period Product Price Type QTY TRADE_TYPE DIRECTION
T001 Jan-20 EQ 69.87 Sell -10 Spread Sell
T001 Feb-21 EQ 69.77 Buy 10 Spread Sell
T002 Apr-20 BN 10.77 Buy 15 Flat Apr Buy
T003 Jul-20 EQ 71.25 Sell -20 Trio Sell
T003 Aug-20 EQ 70.89 Buy 40 Trio Sell
T003 Sep-20 EQ 70.69 Sell -20 Trio Sell
T004 Nov-20 BN 20.83 Buy 10 Arbitrage Buy
T004 Dec-20 EQ 40.01 Sell 12 Arbitrage Buy
T005 Sep-20 FD 31.25 Buy -20 Trio Buy
T005 Mar-21 FD 36.89 Sell 40 Trio Buy
T005 Sep-21 FD 40.69 Buy -20 Trio Buy
谁能帮助解决这个问题或指出我正确的方向? (如何在行和列上同时迭代和使用 if 条件等)。
非常感谢您提前提供的帮助!
【问题讨论】:
标签: python pandas numpy dataframe data-analysis