首页 > 解决方案 > 如何根据共同日期在单个数据框中对齐两个数据框的数据

问题描述

我有两个 csv 文件,我从中创建了一个数据框。问题是它首先添加了“Tatasteel”的数据,然后是“Tatamotors”的数据。我想要的是根据日期订购它们。例如,Tatasteel 的第一个数据是 9:15,然后是 Tatamotors 的数据是 9:15,以此类推。

这是代码:

import pandas as pd
import datetime as dt
from datetime import timedelta
import os
import glob


exclude_days = [dt.datetime(2019, 1, 5), dt.datetime(2019, 1, 6), dt.datetime(2019, 1, 12), dt.datetime(2019, 1, 13), dt.datetime(2019, 1, 19), dt.datetime(2019, 1, 20),
dt.datetime(2019, 1, 26), dt.datetime(2019, 1, 27) ]
backtest_start = dt.datetime(2019, 1, 1)
backtest_end = dt.datetime(2019, 1, 2)

path = os.getcwd()
path = os.path.join(path,"2019/*")
dat=[]
data3 =[]
stock_list = glob.glob(path)
for stock in stock_list:
   rdata= pd.read_csv(stock, parse_dates=['Date'])
   dat.append(rdata)
data = pd.concat(dat, ignore_index=True)

   
curr_day = backtest_start

while curr_day < backtest_end:
   if curr_day not in exclude_days:
      day_start = dt.datetime(curr_day.year,curr_day.month,curr_day.day, 9, 15)
      day_end = dt.datetime(curr_day.year,curr_day.month,curr_day.day, 15, 15)
      data2 =  data[data['Date'].between(day_start,day_end)]
      data2 = data2.reset_index(drop=True)
      data2 = pd.DataFrame(data2)
      print(data2)         
        
  curr_day += timedelta(days=1)

这是输出: 在此处输入图像描述

标签: pythonpandas

解决方案


使用sort_values

df = df.sort_values('Date')

或者,如果您希望该Date列作为索引:

df = df.set_index('Date').sort_index()

推荐阅读