一、处理逻辑
1.新建一个dataframe,包含两列,一列原数据的date,一列与date相对应的星期
2.因为数值类型的原因需要用pd.concat这个函数将两个dataframe合起来
3.用新增的星期这个字段来进行筛选
4.根据需要再看需不需要把这个重新填到另一个dataframe里边保持index完成
二、实际代码
代码如下(示例):
import pandas as pd
from datetime import datetime as dt
import matplotlib.pyplot as plt
import pickle
pd.set_option('display.max_rows', 8)
plt.rcParams['figure.figsize'] = (16.0, 9.0)
# rf文件
rf = open('F:/xx/data/rf.pkl', 'rb')
rf = pickle.load(rf)
# index文件
index = open('F:/xx/data/index.pkl', 'rb')
index = pickle.load(index)
#可提函数
rf['tradeDate'] = pd.to_datetime(rf['tradeDate'])
index['tradeDate'] = pd.to_datetime(index['tradeDate'])
def stringToDatetime(project,d_date):
project[d_date] = pd.to_datetime(project[d_date])
return project
#可根据需要增加新的变量进行控制
def week_avg(project, ID, project_id):
d_week = []
i = 0
numOfRow = len(project)
for i in range(numOfRow):
# d = dt.strptime(rf['tradeDate'][i], '%Y-%m-%d')
date = dt.date(project['tradeDate'][i])
d_week.append(date.weekday())
# 新建一个表
rf_new = pd.DataFrame(columns=['rf_date', 'rf_week'])
rf_new['rf_week'] = d_week
rf_new['rf_date'] = project['tradeDate']
# 合并两个表
join = pd.concat([project, rf_new], axis=1)
#判断是否需要需要判断ID字段
if project_id == '0':
join = join[(join['rf_week'] == 4)]
else:
join = join[(join[ID] == project_id) & (join['rf_week'] == 4)]
return join
# join=week_avg(rf)[(week_avg(rf)['secID']== 'Shibor1W.IRCN') & (week_avg(rf)['rf_week'] == 4)]
# join1=week_avg(index)[(week_avg(index)['indexID']== '000300.ZICN') & (week_avg(index)['rf_week'] == 4)]
rf_week = week_avg(rf, 'secID', '0')
hs_week = week_avg(index, 'indexID', '0')
print(rf_week)
print(hs_week)
总结
可以按月和年进行筛选,但是有更简单的方法可以直接处理用pd.apply函数