合并不同时间频率的数据 pandas join实现

合并不同时间频率的数据 pandas join实现,第1张

import pandas as pd
import numpy as np
import datetime

GitHub代码链接

先给数据都加上以月为单位的时间index
times = pd.date_range(periods=165, freq='M', end='2020/5')

times = times.to_list()
times.reverse()

times =pd.to_datetime(times)
times = times.strftime('%Y-%m')

df = pd.read_excel(r'data by month.xlsx')
df = df.set_index(times)

df.to_excel(r'./1.xlsx')
对于合并的基准df,需要新增加一列作为排序的标准

如果不这样的话,join后的结果顺序会出问题

df1 = pd.read_excel(r'./data by week.xlsx', header=1, usecols=range(0,4))

tmp = pd.to_datetime(df1["时间(该日期所在“周”的煤炭价格)年/月/日"])
tmp = tmp.dt.strftime('%Y-%m-%d')

df1["时间(该日期所在“周”的煤炭价格)年/月/日"]= pd.to_datetime(df1["时间(该日期所在“周”的煤炭价格)年/月/日"])
df1["时间(该日期所在“周”的煤炭价格)年/月/日"] = df1["时间(该日期所在“周”的煤炭价格)年/月/日"].dt.strftime('%Y-%m')
df1['num'] = pd.Series(data=np.arange(0,len(df1)), index=df1.index)
df1.set_index("时间(该日期所在“周”的煤炭价格)年/月/日", inplace=True)
df.head(3)
山西内蒙古陕西发电量
2020-048595.48527.65600.6190.1
2020-039479.48906.15710.2201.1
2020-027596.08422.05490.0225.0
df1.head(3)
价格低值(元/吨)价格高值(元/吨)价格平均值(元/吨)num
时间(该日期所在“周”的煤炭价格)年/月/日
2020-04470480475.00
2020-04475485480.01
2020-04490495492.52
利用df.join()合并,之后排序
result = df1.join(df)
result.sort_values(by='num', ascending=True, inplace=True)
result.drop(columns='num', axis=1, inplace=True)
result.set_index(tmp, inplace=True)
result.to_excel(r'./2.xlsx')
result.head()
价格低值(元/吨)价格高值(元/吨)价格平均值(元/吨)山西内蒙古陕西发电量
时间(该日期所在“周”的煤炭价格)年/月/日
2020-04-30470480475.08595.48527.65600.6190.1
2020-04-24475485480.08595.48527.65600.6190.1
2020-04-17490495492.58595.48527.65600.6190.1
2020-04-10505515510.08595.48527.65600.6190.1
2020-04-03530535532.58595.48527.65600.6190.1

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/715047.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存