我需要在不同数据帧的某些列之间进行一些操作,我尝试使用以下代码:
df_swap['Apropriacao'] = df_sw[(df_sw.loc[:, 'Ativo'] == df_mov.loc[:, 'Ativo']).all() and (df_sw.loc[:, 'Data posicao'] == df_mov.loc[:, 'Data posicao']).all()].sum(axis=1)
但我认为这不是正确的做法(并显示例外)。
数据框的样本是:
df_mov
idx Data posicao Ativo Valor
0 2017-07-03 RXU7 0.0
1 2017-07-04 RXU7 0.0
2 2017-07-05 RXU7 0.0
3 2017-07-06 RXU7 0.0
4 2017-07-07 RXU7 0.0
5 2017-07-10 RXU7 0.0
...
21 2017-07-03 GCQ7 0.0
22 2017-07-04 GCQ7 0.0
23 2017-07-05 GCQ7 0.0
24 2017-07-06 GCQ7 0.0
25 2017-07-07 GCQ7 1341.0
26 2017-07-10 GCQ7 0.0
...
42 2017-07-03 CNHBRL 0.0
43 2017-07-04 CNHBRL 0.0
44 2017-07-05 CNHBRL 0.0
45 2017-07-06 CNHBRL 0.0
46 2017-07-07 CNHBRL 0.0
47 2017-07-10 CNHBRL 0.0
...
df_sw
Data posicao Ativo Data vencimento Apropriacao
0 2017-07-03 RXU7 2017-09-07 -1431.17
1 2017-07-04 RXU7 2017-09-07 -788258.59
2 2017-07-05 RXU7 2017-09-07 -4206.24
3 2017-07-06 RXU7 2017-09-07 50062.78
4 2017-07-07 RXU7 2017-09-07 499642.57
5 2017-07-10 RXU7 2017-09-07 49191.00
...
21 2017-07-03 GCQ7 None 0.00
22 2017-07-04 GCQ7 2017-07-31 1820.06
23 2017-07-05 GCQ7 2017-07-31 -2767.20
24 2017-07-06 GCQ7 2017-07-31 -1648.37
25 2017-07-07 GCQ7 2017-07-31 0.00
26 2017-07-10 GCQ7 None 0.00
...
42 2017-07-03 CNHBRL None 0.00
43 2017-07-04 CNHBRL None 0.00
44 2017-07-05 CNHBRL None 0.00
45 2017-07-06 CNHBRL None 0.00
46 2017-07-07 CNHBRL None 0.00
47 2017-07-10 CNHBRL None 0.00
如何df_mov['Valor']
与df_sw['Apropriacao']
相等df_mov['Data posicao']
且df_sw['Data posicao']
等于df_mov['Ativo']
?
答案 0 :(得分:0)
我建议合并数据帧然后对列执行求和(这假设您尝试对每行的值求和,而不是将列作为整体求和):
df_mov.merge(df_sw,
left_on=['Data posicao', 'Ativo'],
right_on=['Data posicao', 'Ativo'],
)[['Valor', 'Apropricao']].sum(axis=1)