Python 基于另一个数据帧的日期和值创建数据帧
我对以下问题有一个疑问: 1)Python 基于另一个数据帧的日期和值创建数据帧,python,pandas,Python,Pandas,我对以下问题有一个疑问: 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 v
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
在这个数据框架中
,我有日期和该日期投资组合中股票的名称(v1,v2,…,v102)
2) df2
:在第二个“数据帧”中:
在我的第二个数据框中
,我有下一个日期的每个股票的名称和价格
3) 我想创建几个数据帧
,每个数据帧的周期为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))]
df2[(df2.date>=开始日期)和(df2.date=开始日期)和(df2.date最后日期:
打破
开始日期=结束日期
woww,我正期待着一些关于如何继续的提示,非常感谢!我得到了以下错误:indexer错误:单位置索引器超出范围,因为:tickers=df1[df1.date==start\u date].iloc[0,1:::.tolist()@cost的行似乎没有该日期的数据
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