如果满足条件,请替换熊猫中的列值

时间:2020-10-27 14:30:45

标签: python pandas

我是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值。

任何建议将不胜感激。

0 个答案:

没有答案