wellwell3176
@wellwell3176

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

前年同期比を比較し、条件を満たす商品だけ取り出したい

Q&A

Closed

解決したいこと

商品の前年売上同期比を計算し、前年比で全てプラスになっている商品名を抜き取りたい。

まず、現在利用しているソフトからデータを出力すると、下表のようなデータが得られる。
実際には商品が100種以上は出てくるが、長いので割愛。

image.png

ここで、売上は通期の売上であり、2Qの売上は1Qを含み、3Qの売上は1Qと2Qを含む形になっている。

例:商品名Aの2019年2Qの売上は2500となっているが、これは1Qの2000+2Qの売上、となるので、実質の2Qの売上は2500-2000=500である。

ここから、最新の前年同期比が通年でプラスになっている商品だけを抜き取るという作業をしたい。

image.png

                   図 全体仕様

自分で試したこと

まず、元データのサンプルはこちら

元データ
import pandas as pd
import numpy as np
from pandas import Timestamp

data= {'商品コード': {0: 1001, 1: 1001, 2: 1001, 3: 1001, 4: 1001, 5: 1001, 6: 1001, 7: 1001, 8: 1001, 9: 1001, 10: 1001, 11: 1001, 12: 1002, 13: 1002, 14: 1002, 15: 1002, 16: 1002, 17: 1002, 18: 1002, 19: 1002, 20: 1003, 21: 1003, 22: 1003, 23: 1003}, '商品名': {0: 'A', 1: 'A', 2: 'A', 3: 'A', 4: 'A', 5: 'A', 6: 'A', 7: 'A', 8: 'A', 9: 'A', 10: 'A', 11: 'A', 12: 'B', 13: 'B', 14: 'B', 15: 'B', 16: 'B', 17: 'B', 18: 'B', 19: 'B', 20: 'C', 21: 'C', 22: 'C', 23: 'C'},
    '年度': {0: Timestamp('2019-04-01 00:00:00'), 1: Timestamp('2019-04-01 00:00:00'), 2: Timestamp('2019-04-01 00:00:00'), 3: Timestamp('2019-04-01 00:00:00'), 4: Timestamp('2020-04-01 00:00:00'), 5: Timestamp('2020-04-01 00:00:00'), 6: Timestamp('2020-04-01 00:00:00'), 7: Timestamp('2020-04-01 00:00:00'), 8: Timestamp('2021-04-01 00:00:00'), 9: Timestamp('2021-04-01 00:00:00'), 10: Timestamp('2021-04-01 00:00:00'), 11: Timestamp('2021-04-01 00:00:00'),12: Timestamp('2020-04-01 00:00:00'), 13: Timestamp('2020-04-01 00:00:00'), 14: Timestamp('2020-04-01 00:00:00'), 15: Timestamp('2020-04-01 00:00:00'), 16: Timestamp('2021-04-01 00:00:00'), 17: Timestamp('2021-04-01 00:00:00'), 18: Timestamp('2021-04-01 00:00:00'), 19: Timestamp('2021-04-01 00:00:00'), 20: Timestamp('2021-04-01 00:00:00'), 21: Timestamp('2021-04-01 00:00:00'), 22: Timestamp('2021-04-01 00:00:00'), 23: Timestamp('2021-04-01 00:00:00')},
   '期': {0: '1Q', 1: '2Q', 2: '3Q', 3: '4Q', 4: '1Q', 5: '2Q', 6: '3Q', 7: '4Q', 8: '1Q', 9: '2Q', 10: '3Q', 11: '4Q', 12: '1Q', 13: '2Q', 14: '3Q', 15: '4Q', 16: '1Q', 17: '2Q', 18: '3Q', 19: '4Q', 20: '1Q', 21: '2Q', 22: '3Q', 23: '4Q'},
   '売上': {0: 2000, 1: 2500, 2: 4500, 3: 5700, 4: 3000, 5: 3500, 6: 6800, 7: 7700, 8: 4000, 9: 4600, 10: 8000, 11: 9000, 12: 500, 13: 5000, 14: 6200, 15: 9400, 16: 2000, 17: 6000, 18: 6500, 19: 8500, 20: 200, 21: 300, 22: 400, 23: 600}}

df_raw = pd.DataFrame(data)

これを整理するのはpivotで問題なく可能

データの整理
df = df_raw.pivot(index=["商品コード","商品名","年度"],columns=["期"],values=["売上"])
df.columns =df.columns.droplevel(0)
df=df.rename_axis(None, axis=1)

>>>print(df)
                        1Q    2Q    3Q    4Q
商品コード 商品名 年度                                
1001  A   2019-04-01  2000  2500  4500  5700
          2020-04-01  3000  3500  6800  7700
          2021-04-01  4000  4600  8000  9000
1002  B   2020-04-01   500  5000  6200  9400
          2021-04-01  2000  6000  6500  8500
1003  C   2021-04-01   200   300   400   600

また、通期売上を期別売上にするのもdiffを使えばできました

通期売上を期別売上に変更
df_diff = df.diff(axis=1)
df_diff["1Q"]=df["1Q"]

>>>print(df_diff)
                        1Q      2Q      3Q      4Q
商品コード 商品名 年度                                      
1001  A   2019-04-01  2000   500.0  2000.0  1200.0
          2020-04-01  3000   500.0  3300.0   900.0
          2021-04-01  4000   600.0  3400.0  1000.0
1002  B   2020-04-01   500  4500.0  1200.0  3200.0
          2021-04-01  2000  4000.0   500.0  2000.0
1003  C   2021-04-01   200   100.0   100.0   200.0

問題はここからで、「商品ごとに前年同期比を追加する(diffを使うと、全行に対して差分を取ってしまう)」作業が上手く行きませんでした。

なにか上手い手があれば、どうぞご教授いただきたく。

image.png

0

1Answer

Your answer might help someone💌