Объединить и объединить два кадра данных (с одинаковыми столбцами, но без общего количества столбцов). - PullRequest
2 голосов
/ 12 июня 2019

Я пытаюсь объединить два кадра данных с одинаковыми столбцами, но общее количество столбцов отличается.

Фрейм данных 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 в качестве индекса и сумму QV и QC, сохраняя столбцы из Dataframe 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 ]

3 голосов
/ 12 июня 2019
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
3 голосов
/ 12 июня 2019

Вы должны сделать merge вместо concat

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

, вкл = [ 'ы', 'DATA'])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...