TOMOYUKI-K
@TOMOYUKI-K

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

2つのDataframeを結合して2段組にしたい

解決したいこと

会社の業務効率化の一環で売上日報をPythonで作ろうと考えております。
会社のとある業務ソフトから吐き出したエクセルファイルから
Pandasを利用してデータ操作をしようとしております。

まず仮の元データです。
金額や個数が不自然なところは無視してください。

_df = pd.DataFrame(
        columns = ['売上日','得意先名','コード','製品名','売上金額','売上個数'],
        data = [['2022-1-1','会社A','a00','製品A',100,1],
                ['2022-1-1','会社B','b00','製品B',200,2],
                ['2022-1-1','会社C','c00','製品C',300,3],
                ['2022-1-1','会社A','a00','製品A',1000,10],
                ['2022-1-1','会社B','b00','製品B',2000,20],
                ['2022-1-1','会社C','c00','製品C',3000,30],
                ['2022-1-1','会社A','a00','製品A',10000,100],
                ['2022-1-1','会社B','b00','製品B',20000,200],
                ['2022-1-1','会社C','c00','製品C',30000,300]])

image.png

そして最終的に作りたいデータです。
image.png

赤枠の様に、[売上金額]と[売上個数]の2段で集計を行いたかったのです。

そこでpandasのpivot_tableメソッドを知り実行してみました。
引数valueに[売上金額]と[売上個数]の2つを入れてみたところそれぞれが横並びになりました。

df = _df.pivot_table(index=['売上日','得意先名'], columns=['コード','製品名'], values=['売上個数'], aggfunc='sum', fill_value=0, margins=True, margins_name='合計')

image.png

pivot_tableメソッドで一度に理想の表を作ることは難しいと思い
[売上金額]と[売上個数]のそれぞれでまずpivot_tableを実行し
後で2つを結合できないかと考えました。

お聞きしたいことは以下になります。

①そもそも一度に2段組にするpivot_tableの方法があるか
②①が無理として2つの表を結合して理想の表の様にすることができるか。

0

1Answer

縦持ちに変形する列と横持ちに変形する列があるので一度は無理だと思います。
例示されている.pivot_table()の結果に、さらに.stack()を適用すると理想の形になるのではないでしょうか。

df = _df.pivot_table(index=['売上日', '得意先名'],
                     columns=['コード', '製品名'],
                     values=['売上個数', '売上金額'],
                     aggfunc='sum', fill_value=0,
                     margins=True, margins_name='合計').stack(0)
1Like

Comments

  1. @TOMOYUKI-K

    Questioner

    返信遅れ申し訳ございません。
    その方法で無事できました!
    こんなにシンプルなことなのに気づきませんで目から鱗でした。
    誠にありがとうございました。

Your answer might help someone💌