我有两个数据框。第一个 df1
包含各种代码的历史时间序列数据,其 DateTime 索引如下所示:
ABC DEF XYZ
2011-06-06 10.00 10.00 10.0000
2011-06-17 10.00 10.00 10.0000
2011-06-21 10.00 10.00 10.0000
2011-06-22 10.00 10.00 10.0000
2011-06-23 10.00 10.00 10.0000
2011-06-24 10.00 10.00 10.0000
2011-06-30 10.00 10.00 10.0000
2011-07-11 10.00 10.00 10.0000
第二个 df2
有三列; Start_Date
、End_Date
和 Ticker
。 Start_Date
和 End_Date
均采用日期时间格式:
End_Date Start_Date Ticker
0 2011-06-27 2011-06-22 ABC
1 2011-06-30 2011-06-17 DEF
2 2011-06-25 2011-06-18 XYZ
我想使用以下代码创建第三个 DataFrame,df3
df4 = df.copy()
df4.lock[:] = np.nan
在 df2['Start_Date']
和 df2['End_Date']
之间,我想用 1.00< 填充
并将其他行保留为 df3
行np.nan
。
我尝试创建一个函数并迭代df2
。
def pos():
position = 1
for i in df2['Ticker']:
df3.at[df2['Start_Date'], i] = position
return pos
或
def pos():
position = 1
for index, row in df2.iterrows:
df3.at[index, row['Start_Date']] = position
return pos
生成的 df3
看起来像这样:
ABC DEF XYZ
2011-06-06 NaN NaN NaN
2011-06-17 NaN 1.0 NaN
2011-06-21 NaN 1.0 1.0
2011-06-22 1.0 1.0 1.0
2011-06-23 1.0 1.0 1.0
2011-06-24 1.0 1.0 1.0
2011-06-30 NaN 1.0 NaN
2011-07-11 NaN NaN NaN
2011-07-13 NaN NaN NaN
2011-07-14 NaN NaN NaN
我在这两方面都没有太多运气。最好的方法是什么?
提前致谢
最佳答案
IIUC:
d2 = df2.set_index('Ticker')
df3 = df1.copy()
for tick, col in df3.iteritems():
d2 = df2.set_index('Ticker')
sd = d2.at[tick, 'Start_Date']
ed = d2.at[tick, 'End_Date']
df3.loc[sd:ed, tick] = 1
df3
ABC DEF XYZ
2011-06-06 10.0 10.0 10.0
2011-06-17 10.0 1.0 10.0
2011-06-21 10.0 1.0 1.0
2011-06-22 1.0 1.0 1.0
2011-06-23 1.0 1.0 1.0
2011-06-24 1.0 1.0 1.0
2011-06-30 10.0 1.0 10.0
2011-07-11 10.0 10.0 10.0
关于python - 创建一个以另一个 DataFrame 为条件的 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871169/