下面是Sales
表,其中包含以下数据:
销售:
S_ID S_QTY S_PRD S_ST_DT S_END_DT
1 223 AA 2018-06-02 2018-06-04
2 442 FO 2018-05-10 2018-05-12
3 771 WA 2018-07-07 2018-07-10
4 663 AAG 2018-03-02 2018-03-03
我正在尝试获取S_ST_DT
和S_END_DT
之间的日期。
在DB2-SQL
和Pandas
中期望以下O / P:
预期的O / P:
S_ID S_QTY S_PRD S_DT
1 223 AA 2018-06-02
1 223 AA 2018-06-03
1 223 AA 2018-06-04
2 442 FO 2018-05-10
2 442 FO 2018-05-11
2 442 FO 2018-05-12
3 771 WA 2018-07-07
3 771 WA 2018-07-08
3 771 WA 2018-07-09
3 771 WA 2018-07-10
4 663 AAG 2018-03-02
4 663 AAG 2018-03-03
这里有什么建议吗?
答案 0 :(得分:4)
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])
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']
)
答案 1 :(得分:4)
pop
并提取最后两列pd.date_range
np.repeat
df
from itertools import chain
v = [pd.date_range(x, y)
for x, y in zip(df.pop('S_ST_DT'), df.pop('S_END_DT'))]
df = (pd.DataFrame(df.values.repeat([len(u) for u in v], axis=0),
columns=df.columns)
.assign(S_DT=list(chain.from_iterable(v))))
print(df)
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
答案 2 :(得分:3)
借来的感冒为v设置
from collections import ChainMap
d=dict(ChainMap(*map(dict.fromkeys, v, df.index)))
#df=df.reindex(d.values()).assign(DT=d.keys()).sort_index()
df.reindex(d.values()).assign(DT=d.keys()).sort_index()
Out[281]:
S_ID S_QTY S_PRD DT
0 1 223 AA 2018-06-03
0 1 223 AA 2018-06-04
0 1 223 AA 2018-06-02
1 2 442 FO 2018-05-10
1 2 442 FO 2018-05-12
1 2 442 FO 2018-05-11
2 3 771 WA 2018-07-09
2 3 771 WA 2018-07-08
2 3 771 WA 2018-07-07
2 3 771 WA 2018-07-10
3 4 663 AAG 2018-03-02
3 4 663 AAG 2018-03-03
答案 3 :(得分:3)
DB2:
@media print {
body{
width: 100%;
margin: 0;
padding: 0;
}
img {
max-width: 100%;
}
img {
page-break-inside: avoid;
}
}