Понимание
pd.DataFrame(
[t + [d] for *t, s, e in df.itertuples(index=False)
for d in pd.date_range(s, e)],
columns=df.columns[:-2].tolist() + ['S_DT']
)
S_ID S_QTY S_PRD S_DT
0 1 223 AA 2018-06-02
1 1 223 AA 2018-06-03
2 1 223 AA 2018-06-04
3 2 442 FO 2018-05-10
4 2 442 FO 2018-05-11
5 2 442 FO 2018-05-12
6 3 771 WA 2018-07-07
7 3 771 WA 2018-07-08
8 3 771 WA 2018-07-09
9 3 771 WA 2018-07-10
10 4 663 AAG 2018-03-02
11 4 663 AAG 2018-03-03
Альтернативная итерация кортежа
pd.DataFrame(
[t + [d] for *t, s, e in zip(*map(df.get, df))
for d in pd.date_range(s, e)],
columns=df.columns[:-2].tolist() + ['S_DT']
)
Если два столбца даты не заканчиваются, сделайте это заранее.
cols = ['S_ST_DT', 'S_END_DT']
df = df.drop(cols, 1).join(df[cols])
для Legacy Python (<= 2.7) </h3> pd.DataFrame(
[t[:-2] + (d,) for t in zip(*map(df.get, df))
for d in pd.date_range(*t[-2:])],
columns=df.columns[:-2].tolist() + ['S_DT']
)