看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
营销活动中,一个活动的目标是带来订单量,如果同时进行多个活动,在持续的时间中,活动每天会有新的订单量增加。在本案例中,我们利用 pandas 订单每个活动每天相对于昨天新增加多少订单量。
以下为数据,我们先读取到 DataFrame,再进行需求描述。
from io import StringIO
import pandas as pd
data = '''
campaign_id,order_num,occur_day
744552718,58,2022-03-26
750580113,250,2022-03-26
730919191,90,2022-03-26
735166245,49,2022-03-26
750948718,138,2022-03-26
702042155,392,2022-03-26
701769306,2529,2022-03-27
744552718,70,2022-03-27
750580113,251,2022-03-27
730919191,96,2022-03-27
735166245,55,2022-03-27
750948718,138,2022-03-27
744552718,109,2022-03-28
'''
df = pd.read_csv(StringIO(data), sep=',')
df
'''
campaign_id order_num occur_day
0 744552718 58 2022-03-26
1 750580113 250 2022-03-26
2 730919191 90 2022-03-26
3 735166245 49 2022-03-26
4 750948718 138 2022-03-26
5 702042155 392 2022-03-26
6 701769306 2529 2022-03-27
7 744552718 70 2022-03-27
8 750580113 251 2022-03-27
9 730919191 96 2022-03-27
10 735166245 55 2022-03-27
11 750948718 138 2022-03-27
12 744552718 109 2022-03-28
'''
数据中三列分别代表:
需求希望增加一个新列 order_add,用于统计,同一活动想对于昨天新新加的订单。
先将 occur_day 转为时间格式,再进行排序,方便我们做行间差值。这时先不要着急求位差,因为差值要在活动内部进行,因此我们先按 campaign_id 进行分组,再用 transform() 调用求行差的方法 diff(),最后仅取 order_num 列,就得到了按活动日期间的订单数量差值。用 transform() 能够保证返回的数据与原数据形状一致。
最后将计算结果增加一个新列到原数据。
foo = (
df.astype({'occur_day': 'datetime64[ns]'})
.sort_values('occur_day')
.groupby(['campaign_id'])
.transform(lambda x: x.diff())
.order_num
)
foo
'''
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 12.0
8 1.0
9 6.0
10 6.0
11 0.0
12 39.0
Name: order_num, dtype: float64
将计算好的列值增加到原表:
df.assign(order_add=foo)
'''
campaign_id order_num occur_day order_add
0 744552718 58 2022-03-26 NaN
1 750580113 250 2022-03-26 NaN
2 730919191 90 2022-03-26 NaN
3 735166245 49 2022-03-26 NaN
4 750948718 138 2022-03-26 NaN
5 702042155 392 2022-03-26 NaN
6 701769306 2529 2022-03-27 NaN
7 744552718 70 2022-03-27 12.0
8 750580113 251 2022-03-27 1.0
9 730919191 96 2022-03-27 6.0
10 735166245 55 2022-03-27 6.0
11 750948718 138 2022-03-27 0.0
12 744552718 109 2022-03-28 39.0
这样就完成了需求。
(完)
更新时间:2024-08-18 15:56:37 标签:pandas python 分组 增量