为每个 id 分区添加下月初
Posted
技术标签:
【中文标题】为每个 id 分区添加下月初【英文标题】:Add beginning of next month per id partition 【发布时间】:2021-08-04 16:47:42 【问题描述】:我正在尝试向我的 pandas 数据框中添加一个名为 rev_month
的新列。
此列应该是上一行中值的迭代相加。
first_date
列是 datetime64[ns]
这是输入:
id first_date revenue_month_number
1 2020-12-30 15:14:49 1
2 2021-03-01 01:36:23 1
2 2021-03-01 01:36:23 2
2 2021-03-01 01:36:23 3
3 2021-03-02 19:13:56 1
3 2021-03-02 19:13:56 2
3 2021-03-02 19:13:56 3
3 2021-03-02 19:13:56 4
3 2021-03-02 19:13:56 5
rev_month
列应该(通过id
迭代)总是从first_date
获取月份的开始,对于revenue_month_number
== 1,并为随后的收入_月份_数字再添加一个(开始的)月份值。
期望的输出:
id first_date revenue_month_number rev_month
1 2020-12-30 15:14:49 1 2020-12-01
2 2021-03-01 01:36:23 1 2021-03-01
2 2021-03-01 01:36:23 2 2021-04-01
2 2021-03-01 01:36:23 3 2021-05-01
3 2021-03-02 19:13:56 1 2021-03-01
3 2021-03-02 19:13:56 2 2021-04-01
3 2021-03-02 19:13:56 3 2021-05-01
3 2021-03-02 19:13:56 4 2021-06-01
3 2021-03-02 19:13:56 5 2021-07-01
我尝试了多种方法,但似乎无法成功。
如果有人有建议将不胜感激!
数据框可以通过以下方式重现:
data = 'first_date': ['2020-12-30 15:14:49', '2021-03-01 01:36:23', '2021-03-01 01:36:23',
'2021-03-01 01:36:23', '2021-03-02 19:13:56', '2021-03-02 19:13:56',
'2021-03-02 19:13:56', '2021-03-02 19:13:56', '2021-03-02 19:13:56'],
'revenue_month_number': [1,1,2,3,1,2,3,4,5]
df = pd.DataFrame.from_dict(data)
df['first_date'] = pd.to_datetime(df['first_date'])
【问题讨论】:
【参考方案1】:让我们试试offsets
df['new'] = df.apply(lambda x: x['first_date'] + pd.offsets.MonthEnd(x['revenue_month_number']) +pd.offsets.MonthBegin(-1) , axis=1)
df
Out[43]:
id first_date revenue_month_number new
0 1 2020-12-30 1 2020-12-01
1 2 2021-03-01 1 2021-03-01
2 2 2021-03-01 2 2021-04-01
3 2 2021-03-01 3 2021-05-01
4 3 2021-03-02 1 2021-03-01
5 3 2021-03-02 2 2021-04-01
6 3 2021-03-02 3 2021-05-01
7 3 2021-03-02 4 2021-06-01
8 3 2021-03-02 5 2021-07-01
【讨论】:
这很漂亮,而且效果很好。谢谢!以上是关于为每个 id 分区添加下月初的主要内容,如果未能解决你的问题,请参考以下文章