使用大量数据框中的大量列进行计算

时间:2017-08-15 17:39:27

标签: python python-3.x pandas

我需要在不同数据帧的某些列之间进行一些操作,我尝试使用以下代码:

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']

1 个答案:

答案 0 :(得分:0)

我建议合并数据帧然后对列执行求和(这假设您尝试对每行的值求和,而不是将列作为整体求和):

df_mov.merge(df_sw, 
    left_on=['Data posicao', 'Ativo'], 
    right_on=['Data posicao', 'Ativo'],
    )[['Valor', 'Apropricao']].sum(axis=1)