#A列の値とB列の値を比較し、その大小関係を0/1で表す
import pandas as pd
df_t = pd.DataFrame({'登録日': ['2021-04-11','2021-06-09','2021-08-15','2021-08-18','2021-09-02','2021-09-10']
,'商品名': ['A', 'B', 'B','C', 'C', 'A']
,'配送先': ['東京', '愛知', '兵庫','宮城', '大阪', '静岡']
,'基準日': ['2021-05-11','2021-08-11','2021-08-11','2021-09-02','2021-09-02','2021-05-11']
})
print(df_t)
# 登録日 商品名 配送先 基準日
# 0 2021-04-11 A 東京 2021-05-11
# 1 2021-06-09 B 愛知 2021-08-11
# 2 2021-08-15 B 兵庫 2021-08-11
# 3 2021-08-18 C 宮城 2021-09-02
# 4 2021-09-02 C 大阪 2021-09-02
# 5 2021-09-10 A 静岡 2021-05-11
例えば上のように、商品ごとの売上記録があるとします。
そして、データの「登録日」が「基準日」より前の記録は何件あるか?ということが知りたいとします。
そんな時は、両方の列を比較し、
・ 登録日が基準日よりも前なら1
・ 後なら0
を格納する列(例:'flg')を新たに作り、その列の合計を取得すればいいです。(もっとスマートなやり方があるかもですが)
このflg列を作るコードは以下。
df_t.loc[df_t['登録日'] < df_t['基準日'], 'flg'] = 1
df_t.loc[df_t['登録日'] >= df_t['基準日'], 'flg'] = 0
df_t
結果:
|登録日| 商品名| 配送先| 基準日| flg
|:-:|:-:|:-:|:-:|:-:|:-:|
0| 2021-04-11| A| 東京| 2021-05-11| 1.0
1| 2021-06-09| B| 愛知| 2021-08-11| 1.0
2| 2021-08-15| B| 兵庫| 2021-08-11| 0.0
3| 2021-08-18| C| 宮城| 2021-09-02| 1.0
4| 2021-09-02| C| 大阪| 2021-09-02| 0.0
5| 2021-09-10| A| 静岡| 2021-05-11| 0.0
「登録日」が「基準日」より前の記録件数は
df_t['flg'].sum()
# 3.0
#追記:
ありがたいことにコメントをいただいたのですが、
df_t.assign(flg=df_t['登録日'] < df_t['基準日'])
や
df_t.eval('flg = 登録日 < 基準日')
といったコードでもflg列は作れます。この場合、
|登録日| 商品名| 配送先| 基準日| flg
|:-:|:-:|:-:|:-:|:-:|:-:|
0| 2021-04-11| A| 東京| 2021-05-11| True
1| 2021-06-09| B| 愛知| 2021-08-11| True
2| 2021-08-15| B| 兵庫| 2021-08-11| False
3| 2021-08-18| C| 宮城| 2021-09-02| True
4| 2021-09-02| C| 大阪| 2021-09-02| False
5| 2021-09-10| A| 静岡| 2021-05-11| False
というように、flg列は1/0ではなく True/Falseになりますが、この場合でも
df_t['flg'].sum()
# 3.0
を実行してもきちんと和がでます。"1/0 と True/Falseは等価"ということは知りませんでした。
お恥ずかしい..