看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本例有两个关于促销活动安排的数据表,需要根据促销活动的安排时间范围并它与销售情况合并,用来观察促销的效果。我们利用 pandas 可以非常灵活地进行上述需求的操作,让我们一起看看怎么完成它吧。
注:本例在 pandas 2.2 下通过,同时建议安装 pyarrow 库。
我们的两份数据如下:
import pandas as pd
import numpy as np
df_sales = pd.DataFrame({
'销售日期':pd.date_range('20240101', periods=9),
'销售额':np.random.randint(100, 1000, 9)
})
df_campiagn = pd.DataFrame({
'活动开始日期':[pd.to_datetime('20240102'), pd.to_datetime('20240105')],
'活动结束日期':[pd.to_datetime('20240103'), pd.to_datetime('20240107')],
'促销描述':['买一送一', '打8折']
})
# 销售表
df_sales
'''
销售日期 销售额
0 2024-01-01 535
1 2024-01-02 237
2 2024-01-03 251
3 2024-01-04 983
4 2024-01-05 989
5 2024-01-06 999
6 2024-01-07 549
7 2024-01-08 648
8 2024-01-09 236
'''
# 活动表
df_campiagn
'''
活动开始日期 活动结束日期 促销描述
0 2024-01-02 2024-01-03 买一送一
1 2024-01-05 2024-01-07 打8折
'''
销售表是每日的销量,活动是所进行的促销活动,促销活动对销售会有影响,为了观察这种影响,我们需要将两份数据合并。合并规则是,在销售表的基础上,将活动表的三个信息增加成为其后的列,当然这个要根据活动的时间范围。最终效果如下:
'''
销售日期 销售额 活动开始日期 活动结束日期 促销描述
0 2024-01-01 535 NaT NaT NaN
1 2024-01-02 237 2024-01-02 2024-01-03 买一送一
2 2024-01-03 251 2024-01-02 2024-01-03 买一送一
3 2024-01-04 983 NaT NaT NaN
4 2024-01-05 989 2024-01-05 2024-01-07 打8折
5 2024-01-06 999 2024-01-05 2024-01-07 打8折
6 2024-01-07 549 2024-01-05 2024-01-07 打8折
7 2024-01-08 648 NaT NaT NaN
8 2024-01-09 236 NaT NaT NaN
'''
大体思路如下:
目的是将 df_sales 中的销售数据与 df_campiagn 中的活动数据匹配,以获取销售日期范围内的促销活动信息。如果匹配到符合条件的活动,将相应的活动开始日期、结束日期和促销描述更新到 df_sales 中。
根据思路的代码为:
for i, r in df_sales.iterrows():
df_temp = df_campiagn[
(df_campiagn.活动开始日期 <= r.销售日期) &
(r.销售日期 <= df_campiagn.活动结束日期)]
if df_temp.pipe(len) > 0:
df_temp = df_temp.iloc[0]
df_sales.loc[i, '活动开始日期'] = df_temp.活动开始日期
df_sales.loc[i, '活动结束日期'] = df_temp.活动结束日期
df_sales.loc[i, '促销描述'] = df_temp.促销描述
这样就完成了需求。
(完)
更新时间:2024-08-18 16:22:03 标签:pandas python 合并