はじめに
前回は以下記事を書きました。
今回は受注済未売上のデータ取得の方法を記事にします。
以下のように受注済と売上済の2つのデータがあったとします。
この2つから受注済だけど未売上のデータ(黄色の部分)の取得を考えてみたいと思います。

この黄色の部分は、別名注残と呼ばれ受注した商品が未出荷である状態のことを指します。
注残については、受発注ラボさんの記事に詳しく書いてあります。
注残は納品トラブルを避けるためにきちんと管理する必要があります。
ここではPandasを使ってこの注残データを取得してみたいと思います。
使用するデータ
受注データ(左側)と売上データ(右側)をマージ。
そして差分(受注データに存在して、売上データに存在しないデータ)を抽出します。

コード全体
コード全体は以下のとおりになります。
import pandas as pd
# 1.CSV読込
df_order = pd.read_csv(
r"Data\受注データ_BOM付き.csv",
encoding="utf-8-sig"
)
df_sale = pd.read_csv(
r"Data\売上データ_BOM付き.csv",
encoding="utf-8-sig"
)
# 2.差分抽出
merged = (
df_order.merge(
df_sale[["売上番号", "売上明細番号"]],
left_on=["受注番号", "受注明細番号"],
right_on=["売上番号", "売上明細番号"],
how="left",
indicator=True
).query("_merge == 'left_only'")
[df_order.columns]
)
1.CSV読込
売上データおよび受注データのCSVを読込みます。
# 1.CSV読込
df_order = pd.read_csv(
r"Data\受注データ_BOM付き.csv",
encoding="utf-8-sig"
)
df_sale = pd.read_csv(
r"Data\売上データ_BOM付き.csv",
encoding="utf-8-sig"
)
【ご参考】CSVファイルの読込(Python Pandas VS Power Query)
https://qiita.com/Masayanf/items/c7f420cab8be30871662
2.差分抽出
差分を抽出するときも、mergeを使います。
Pandasではマージ時に結合と展開を同時に行います。
Power QueryのTable.ExpandTableColumn関数のような展開だけの概念はPandasにはありません。
そのため、df_sale[["売上番号", "売上明細番号"]]で、売上データはキーだけの列のみにします。他の列は削除。
また、indicatorをTrueとすることで_mergeという列(マージ結果)を自動で追加します。
queryは行の抽出をします。left_onlyを指定することで受注済のみのデータを抽出します。
[df_order.columns]は売上済データの列のみを取得します。
merged = (
df_order.merge(
df_sale[["売上番号", "売上明細番号"]],
left_on=["受注番号", "受注明細番号"],
right_on=["売上番号", "売上明細番号"],
how="left",
indicator=True
).query("_merge == 'left_only'")
[df_order.columns]
)
PandasでのDataFrameの指定
- df_sale.loc[:, ["売上番号", "売上明細番号"]]を省略して、df_sale[["売上番号", "売上明細番号"]]と記述できます
- .loc[:, df_order.columns]を省略して [df_order.columns]と記述できます
indicatorをTrueとしてときの_Margeの意味は以下のとおりになります。
| _Margeの値 | 意味 |
|---|---|
| left_only | 左側にのみ存在 |
| right_only | 右側にのみ存在 |
| both | 両方に存在 |
まとめ・所感
非エンジニアのような業務でも差分抽出のような処理はあると思い記事にしました。
こういう処理をさらっと書いてみたいです。
また、Power QueryとPandasでは色々と異なる部分があると感じました。
