Pandas を使う場合。
python
1import pandas as pd
2
3data1 = pd.read_csv('data1.csv', parse_dates=['From', 'To'])
4data2 = pd.read_csv('data2.csv', parse_dates=['date'])
5
6dfx = pd.merge(data1, data2, on='ID').query('From <= date <= To')
7dfy = data1.merge(dfx, indicator=True, how='outer').query('_merge=="left_only"').iloc[:,:-1]
8df = pd.concat([dfx, dfy]).sort_values(['ID', 'From']).reset_index(drop=True)
9cols = ['From', 'To', 'date']
10df[cols] = df[cols].apply(lambda x: x.dt.strftime('%Y/%-m/%-d'))
11df = df.fillna('')
12
13print(df)
ID | From | To | date | product_id |
---|
1 | 2022/1/1 | 2022/1/31 | 2022/1/10 | aaa |
1 | 2022/2/1 | 2022/2/28 | 2022/2/11 | bbb |
1 | 2022/2/1 | 2022/2/28 | 2022/2/22 | ccc |
2 | 2022/2/1 | 2022/2/28 | 2022/2/16 | ddd |
3 | 2022/1/1 | 2022/1/31 | | |
3 | 2022/3/1 | 2022/3/31 | 2022/3/23 | aaa |
4 | 2022/1/1 | 2022/1/31 | 2022/1/28 | ccc |