合并和汇总两个数据框(具有相同的列,但不包括总列数)

时间:2019-06-12 14:13:52

标签: python pandas merge

我试图将具有相同列的两个数据框连接起来,但是列的总数不同。

数据框1

   SKU     DATA      QV  QC
0   70  2018-01-01  3.0 30.0
1   70  2018-01-02  2.0 20.0
2   70  2018-01-03  1.0 10.0

数据框2

 SKU  LOJA    DATA        PVENDA   QV  QC   ESTOQUE_VENDA ESTOQUE_VENDA_UN_COMPRA CURVA_ABC   FORNECEDOR
1   70  HD01    2018-01-01  14.07   2.0 20.0    539.0   5390.0  S   7355
2   70  HD01    2018-01-02  13.78   2.0 20.0    539.0   5390.0  S   7355
3   70  HD01    2018-01-03  13.78   2.0 20.0    539.0   5390.0  S   7355

他们两个都有SKU, DATA, QV, QC

我必须通过使用SKU, DATA作为索引进行分组,并对QVQC求和,以保持数据框2中不常见的列。

预期输出:

   SKU  LOJA    DATA        PVENDA   QV  QC   ESTOQUE_VENDA ESTOQUE_VENDA_UN_COMPRA CURVA_ABC   FORNECEDOR
1   70  HD01    2018-01-01  14.07   8.0 50.0    539.0   5390.0  S   7355
2   70  HD01    2018-01-02  13.78   4.0 40.0    539.0   5390.0  S   7355
3   70  HD01    2018-01-03  13.78   3.0 40.0    539.0   5390.0  S   7355

当我尝试这个时:

pd.concat([df, df1], axis=1).groupby(['SKU', 'DATA'], axis=1).sum()

但是我遇到了以下错误:

ValueError: Grouper for 'SKU' not 1-dimensional

2 个答案:

答案 0 :(得分:3)

您应该做merge而不是concat

df2.drop(['QV','QC'],1).merge(df1.groupby(['SKU', 'DATA'],as_index=Fasle).sum()

,on = ['SKU','DATA'])

答案 1 :(得分:3)

pd.concat(df1.align(df2, 'inner', 1)) \
  .groupby(['SKU', 'DATA'], as_index=False).sum() \
  .merge(df2.drop(['QV', 'QC'], 1))

   SKU        DATA   QV    QC  LOJA  PVENDA  ESTOQUE_VENDA  ESTOQUE_VENDA_UN_COMPRA CURVA_ABC  FORNECEDOR
0   70  2018-01-01  5.0  50.0  HD01   14.07          539.0                   5390.0         S        7355
1   70  2018-01-02  4.0  40.0  HD01   13.78          539.0                   5390.0         S        7355
2   70  2018-01-03  3.0  30.0  HD01   13.78          539.0                   5390.0         S        7355