我是python和pandas的新手,如果这看起来像是一个愚蠢的问题,请您道歉。
我基本上有一个包含3列的数据框['WEEK COMMENCING','week start date','value'],它是.melt()的结果,看起来像下面的df:
WEEK COMMENCING week start date value
0 WEEK NUMBER 2020-01-06 00:00:00 40
78 WEEK NUMBER 2020-01-13 00:00:00 41
156 WEEK NUMBER 2020-01-20 00:00:00 42
234 WEEK NUMBER 2020-01-27 00:00:00 43
312 WEEK NUMBER Monthly 2020-01-01 00:00:00
... ... ... ...
9594 WEEK NUMBER 2021-12-06 00:00:00 36
9672 WEEK NUMBER 2021-12-13 00:00:00 37
9750 WEEK NUMBER 2021-12-20 00:00:00 38
9828 WEEK NUMBER 2021-12-27 00:00:00 39
9906 WEEK NUMBER Monthly.23 2021-12-01 00:00:00
我试图用同一行中的值将字符串中的“每月”替换为同一行,以创建仅包含日期的列,并为月份创建适当的日期格式,而不是字符串。
ie:我想返回'2020-01-01 00:00:00',而不是第五行的“每月”,并将其应用于“周号”下的所有行,直到“周星号”。
因此结果应如下所示:
WEEK COMMENCING week start date value
312 WEEK NUMBER 2020-01-01 00:00:00 2020-01-01 00:00:00
313 LABEL 1 2020-01-01 00:00:00 LABEL 1 value
314 LABEL 2 2020-01-01 00:00:00 LABEL 2 value
...
到目前为止,我设法将月字符串替换为执行以下操作的值:
# Create a column that will keep only the string monthly
df_melt['test'] = df_melt['week start date'].str.split('.',expand=True)[0]
# Replace the 'week start date' column with the date of 'value' if a string "Monthly' is found in
'test'
df_melt['week start date'] = np.where(df_melt['test']=='Monthly',
df_melt['value'],
df_melt['week start date'])
但是我只能得到我想要的结果的一部分:
WEEK COMMENCING week start date value
312 WEEK NUMBER 2020-01-01 00:00:00 2020-01-01 00:00:00
313 LABEL 1 LABEL 1 value LABEL 1 value
314 LABEL 2 LABEL 2 value LABEL 2 value
不确定如何从此处继续,以便用月份的日期代替Label 1值和Label 2值。
任何建议将不胜感激。