python - 根据另一个数据框的日期和值创建数据框
问题描述
我有以下问题:
1)df1
:一个DataFrame
具有以下列:
date Unnamed: 1 Unnamed: 2 Unnamed: 3 ........ Unnamed: 102
2001-12-28 v1 v2 v4 v102
2002-1-30 v1 v3 v7 v102
2002-2-24 v2 v4 v5 v102
.
.
.
.
2020-05-20 v1 v8 v9 v102
在此DataFrame
,我有该日期投资组合中股票的日期和名称(v1,v2,...,v102)。
2)df2
:在第二个“DataFrame”中:
date code price
2002-04-21 v1 50
2002-04-23 v1 50.2
2002-04-23 v2 10.1
. . .
(955809 rows later). .
. . .
2020-05-20 v3 14.3
在我的第二个DataFrame
中,我有下一个日期每只股票的名称和价格
3)我想创建几个DataFrames
每个 3 个月的时间段,从第一行的日期开始,df1
然后向前移动 3 个月,只有df1
行中存在的股票与开始日期匹配。
例如 :
df3 : 开始日期 2001-12-28
date code price
2001-12-28 v1 50
2001-12-29 v1 50.2
2001-12-29 v2 13.1
. . .
. . .
. . .
2020-03-28 v3 6.5
我不知道如何开始,或者如何以紧凑的方式写作,如果你们能指出我一个很好的方向。
解决方案
获取第一行数据并获取日期
tickers = df1.iloc[0, 1:].tolist()
# if not datetime
#df1['date'] = pd.to_datetime(df1['date'])
start_date = df.date.iloc[0]
end_date = start_date + pd.DateOffset(months=3)
过滤掉不需要的数据
df2[(df2.date >= start_date) & (df2.date <= end_date) & (df2.ticker.isin(tickers))]
然后您可以将这两个步骤添加到循环中。
list_df = []
last_date = df1.iloc[-1,0]
start_date = df1.date.iloc[0]
while True:
end_date = start_date + pd.DateOffset(months=3)
cut_off_date = min(last_date, end_date)
tickers = df1[df1.date == start_date].iloc[0, 1:].tolist()
list_df.append(df2[(df2.date >= start_date) & (df2.date <= cut_off_date) & (df2.ticker.isin(tickers))])
if end_date > last_date:
break
start_date = end_date
推荐阅读
- dns - 获取 DNS_PROBE_FINISHED_NXDOMAIN 试图在 Dreamhost 中创建子域
- python - 如何解决 HTTPSConnectionPool(host='graph.facebook.com', port=443): Max retries exceeded with url
- java - 在 Wildfly 上使用 Spring Boot 战争应用程序查找远程 EJB 时出错
- python - Python 模拟依赖项
- c - 理解 C 中的 extern 关键字
- nuget - NuGet:两个带有目标文件的包导致错误复制的 DLL
- sql - 带有子查询的 INSERT INTO 是否作为单个事务运行(线程安全)?
- r - R中是否有一个函数可以按多列中的值过滤矩阵
- c# - Xamarin/ C# 选项卡式页面 Zxing 扫描仪问题
- facebook - 如何使用 api 检索 facebook 帖子背景?