Pandas Two Dataframes вычитают на основе нескольких индексов - PullRequest
0 голосов
/ 22 октября 2018

У меня есть два dfs, и я хочу вычесть на основе нескольких индексов

profitDf

Company    Product   Amount
Google     Pixel 2   3000
Microsoft  Window 10 4000
Amazon     AWS       10000

costDf

Company    Product    Amount
Google     Pixel 2    10000
Microsoft  Window 10  1000
ASUS       Router     50000

Я хотел бы создать фрейм данныхкак показано ниже

разницаDf

Company    Product    Difference
Google     Pixel 2    -7000
Microsoft  Window 10  3000
Amazon     AWS        10000
ASUS       Router     -50000

Я пытался

profitDf.set_index(['Company','Product']).sub(costDf.set_index(['Company','Product']), fill_value=0).reset_index()

, но он показывает NotImplementedError: merging with both multi-indexes is not implemented

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 22 октября 2018

Поскольку это многократный индекс, используя merge

pdf.merge(cdf,on=['Company','Product'],how='outer').fillna(0).eval('Diff=Amount_x-Amount_y')
Out[205]: 
     Company   Product  Amount_x  Amount_y     Diff
0     Google    Pixel2    3000.0   10000.0  -7000.0
1  Microsoft  Window10    4000.0    1000.0   3000.0
2     Amazon       AWS   10000.0       0.0  10000.0
3       ASUS    Router       0.0   50000.0 -50000.0

Или используя pivot

pdf.pivot(*pdf.columns).sub(cdf.pivot(*cdf.columns),fill_value=0).stack()
Out[218]: 
Company    Product 
ASUS       Router     -50000.0
Amazon     AWS         10000.0
Google     Pixel2      -7000.0
Microsoft  Window10     3000.0
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...