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

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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值