提问人:Tmiskiewicz 提问时间:7/11/2023 最后编辑:MarkTmiskiewicz 更新时间:7/11/2023 访问量:48
在 pandas 中创建自当前月份列以来的月份
Create months since current month column in pandas
问:
我的 DF 如下所示:
IndexData Week_number
2022-12-28 53
2022-12-29 53
2022-12-30 53
2022-12-31 53
2023-01-01 1
2023-01-02 1
2023-01-03 1
2023-01-04 1
.........
2023-02-27 9
2023-02-28 9
2023-03-01 9
2023-03-02 9
........
2023-03-29 13
2023-03-30 13
2023-03-31 13
我需要创建另一列,如下所示:
IndexData Week_number new_column
2022-12-28 53 -9
2022-12-29 53 -9
2022-12-30 53 -9
2022-12-31 53 -9
........
2023-01-03 1 -8
2023-01-04 1 -8
.........
2023-02-27 9 -1
2023-02-28 9 -1
2023-03-01 9 Current_month
2023-03-02 9 Current_month
........
2023-03-29 13 Current_month
2023-03-30 13 Current_month
2023-03-31 13 Current_month
新列的逻辑是:
- 它应该将数据集中的最后一个月标记为“Current_month”,然后根据索引日期开始计算从最近到最早日期的周数。你知道我该如何解决这个问题吗?
问候
答:
0赞
Willy
7/11/2023
#1
您可以使用 From Python 获取当前日期。分析该月的该日期,然后插入一个新列,其中根据分析的月份满足所需的条件。datatime
import datetime
date_is = str(datetime.datetime.now())
month_is = date_is[5:7]
使用month_is并找出不同日期与所需当前日期相距甚远的逻辑
评论
0赞
Tmiskiewicz
7/11/2023
谢谢,但我需要获取数据集中存在的最后一个月。它不一定是我们现在拥有的电流。基本上我找到了解决方案: df['Year'] = df['IndexDate'].astype(str).str[:4] df['Month'] = df['IndexDate'].astype(str).str[5:7] df2 = df[['IndexDate','周数','Year','Month']][df.年份 == df['年份'].max()] df2 = df2[['索引日期','周数','开盘值','差异','年','月']][df2.月份 == df2['月'].max()]
0赞
Willy
7/11/2023
好。当您第二次更新您的帖子以反映您的答案时,如果其他人搜索类似内容,他们可以找到您的解决方案。
1赞
Mark
7/11/2023
#2
如果不是这样,那么请告诉我你如何获得所需的输出(我只是在这一点上抛出随机的想法
df['weeks from max date'] = (df['IndexData'] - df['IndexData'].max()).dt.days // 7
IndexData Week_number weeks from max date
0 2022-12-28 53 -14
1 2022-12-29 53 -14
2 2022-12-30 53 -13
3 2022-12-31 53 -13
4 2023-01-01 1 -13
5 2023-01-02 1 -13
6 2023-01-03 1 -13
7 2023-01-04 1 -13
8 2023-02-27 9 -5
9 2023-02-28 9 -5
10 2023-03-01 9 -5
11 2023-03-02 9 -5
12 2023-03-29 13 -1
13 2023-03-30 13 -1
14 2023-03-31 13 0
评论
0赞
Tmiskiewicz
7/11/2023
这几乎是正确的,但它应该不是每个月而是每周更改值。因此,它应该以 4 个值 (-1,-2,-3,-4) 分隔,而不是整个 2 月的 -1 值。但这已经很接近了
1赞
Mark
7/11/2023
那样的话,那不会是一个月前吗?
0赞
Tmiskiewicz
7/11/2023
是的。在原始数据集中,每天都有日期
0赞
Mark
7/11/2023
更新了它。如果不是这样,请告诉我们如何获得所需的输出。此时此刻,我只是在黑暗中捅刀子
0赞
Tmiskiewicz
7/11/2023
没事的!你做了最难的部分。现在我将简单地替换最近一个月的值,这将很好。多谢!
1赞
mozway
7/11/2023
#3
使用 datetime 操作:
date = pd.to_datetime(df['IndexData'])
week = date.dt.to_period('W-SAT')
month = date.dt.to_period('M')
df['new_column'] = week.sub(week[month.eq(month.max())].min()).apply(lambda x: x.n)
输出:
IndexData Week_number new_column
0 2022-12-28 53 -9
1 2022-12-29 53 -9
2 2022-12-30 53 -9
3 2022-12-31 53 -9
4 2023-01-01 1 -8
5 2023-01-02 1 -8
6 2023-01-03 1 -8
7 2023-01-04 1 -8
8 2023-02-27 9 0
9 2023-02-28 9 0
10 2023-03-01 9 0
11 2023-03-02 9 0
12 2023-03-29 13 4
13 2023-03-30 13 4
14 2023-03-31 13 4
``
评论