首页 > 解决方案 > 在 Python pandas 中将数据映射到另一年的同一工作日

问题描述

我有一个全年用电量数据的熊猫数据框,但想将表格更新为另一年。我希望数据值落在与以前相同的工作日。

是)我有的:

Date          00:00   ...     WeekDay   requiredDate  requiredWeekDay
25/11/2018       20            Sunday     25/11/2018           Sunday
26/11/2018       30            Monday     26/11/2018           Monday
27/11/2018       25           Tuesday     27/11/2018          Tuesday
28/11/2018       35         Wednesday     28/11/2018        Wednesday
29/11/2018       40          Thursday     29/11/2018         Thursday
30/11/2018       15            Friday     30/11/2018           Friday
01/12/2017       65            Sunday     01/12/2018         Saturday
02/12/2017       34            Monday     02/12/2018           Sunday
03/12/2017       81           Tuesday     03/12/2018           Monday
04/12/2017       62         Wednesday     04/12/2018          Tuesday
...

我想要什么:

Date          00:00   ...     WeekDay     
25/11/2018       20            Sunday               
26/11/2018       30            Monday              
27/11/2018       25           Tuesday         
28/11/2018       35         Wednesday        
29/11/2018       40          Thursday           
30/11/2018       15            Friday               
01/12/2018                   Saturday            
02/12/2018       65            Sunday              
03/12/2018       34            Monday               
04/12/2018       81           Tuesday            
...

我试过的:

df['Day'] = df['Date'].dt.day
df['Month'] = df['Date'].dt.month
df['Year'] = df['Date'].dt.year
requiredYear = str(df['Year'].median()).replace(".0","")

df = df.sort_values(by = ['Month', 'Day']).reset_index()

df['RemappedDate']= np.nan

for index, row in df.iterrows():
  if row['Weekday'] != row['requiredWeekday']:
    while row[row['Day']]<31:
      row['Day'] = row['Day']-1    
      row['RemappedDate'] = pd.to_datetime(str(row['Month'])+"/"+ 
                            str(row['Day'])+"/"+requiredYear)
  else:
    print("Already equal")

df['Date'] = df['RemappedDate']
df['Weekday'] = df['requiredWeekday']

可能不远了,如果没有,很抱歉。我是初学者。

标签: pythonpandasweekday

解决方案


如果我是你,我只会“保留”已经为你制作的 2 列并“移动”something列,例如......

mask = df['Date'] <= '2018-01-01'
df['something'][mask] = df['something'][mask].shift(1)

您可以保留 2 列“new_date”和“new_day”。删除其他并重命名那些 2,无论您想做什么。:)


推荐阅读