这里的python非常初学者。我想对基本选项分析进行一些简单的计算,如三组DataFrame(spot_table,div_table,opt_table)所示。
我在这里寻找的是做类似于excel" sumifs"在python中运行以获得"期望的结果"表
spot_table
Spot Trade_date und
0 197.20 2017-05-29 AAA
1 67.75 2017-05-29 BBB
2 274.80 2017-05-29 CCC
div_table
Div Ex-date und
0 1 2017-09-01 AAA
1 2 2017-10-01 AAA
2 4 2017-11-01 AAA
3 10 2017-10-01 BBB
4 20 2017-11-01 BBB
5 100 2017-09-01 CCC
opt_table
Expiry Opt und
0 2017-10-15 ZZZ AAA
1 2017-11-01 YYY AAA
2 2017-10-30 XXX BBB
3 2017-12-20 WWW CCC
期望的结果
a_Div Expiry Opt und a_Spot
0 3 2017-10-15 ZZZ AAA 197.20
1 7 2017-11-01 YYY AAA 197.20
2 10 2017-10-30 XXX BBB 67.75
3 100 2017-12-20 WWW CCC 274.80
答案 0 :(得分:0)
这需要几个步骤。首先,将spot表加入底层的选项表:
opt_spot=pd.merge(opt_table, spot_table, how='left', on='und')
接下来,为红利表分配一个新列,以确定支付的最新红利(我认为这是您想要的?):
div_table['latest'] = div_table.sort_values(['und', 'Ex-date'], ascending=False).groupby('und').cumcount()+1
使用每个底层证券的最新股息加入新表格(不确定这是否是执行此操作的最佳方式):
desired_output = pd.merge(opt_spot, div_table[div_table['latest'] == 1], how='left', on='und')
重命名和删除您不想要的列:
final_output = desired_output.rename_axis({'Div':'a_Div', 'Spot': 'a_Spot'}, axis=1)[['a_Div', 'Expiry', 'Opt', 'und', 'a_Spot']]