python - 在 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']
可能不远了,如果没有,很抱歉。我是初学者。
解决方案
如果我是你,我只会“保留”已经为你制作的 2 列并“移动”something
列,例如......
mask = df['Date'] <= '2018-01-01'
df['something'][mask] = df['something'][mask].shift(1)
您可以保留 2 列“new_date”和“new_day”。删除其他并重命名那些 2,无论您想做什么。:)
推荐阅读
- html - 增加按键角 4 的计数器并减少退格键
- python-3.x - 如何在nx图中获取度数为0的节点?
- android - imageview的android工具提示显示“捏缩放”
- sql-server - 我可以在 SQL Server 中使用索引视图来仅获取非重复记录吗
- java - 使用 Stream 的 Java 初始化对象和设置属性
- node.js - 对象引用/mongoose-mongodb
- ruby-on-rails-5 - 如何在 RailsAdmin 中显示 ActiveStorage 对象的文件名或自定义文本
- win32com - win32com 和 SAP-GUI
- virtual-machine - 是否可以在具有 x86_64 架构的主机上运行具有 ppc64le 架构的 VM?
- node.js - 如何使用node.js在对象的方法中返回查询mysql的结果