我有一个框架(事件),我想加入到另一个框架(fr),加入日期和符号.不一定有任何日期重叠.事件中的日期将仅与fr中相同或更晚日期的首次发生匹配,因此如果事件日期为2010—12—01,则将在相同日期加入,如果不存在,则将在下一个可用日期(2010—12—02)加入.
我已经try 使用search_sorted和join_asof来完成这一点,但我想按Symbol列分组,而且这不是一个正确的连接.这只适用于单个符号.
fr = pl.DataFrame(
{
'Symbol': ['A']*5,
'Date': ['2010-08-29', '2010-09-01', '2010-09-05',
'2010-11-30', '2010-12-02'],
}
).with_columns(pl.col('Date').str.strptime(pl.Date, '%Y-%m-%d')).with_row_index().set_sorted("Date")
events = pl.DataFrame(
{
'Symbol': ['A']*3,
'Earnings_Date': ['2010-06-01', '2010-09-01', '2010-12-01'],
'Event': [1, 4, 7],
}
).with_columns(pl.col('Earnings_Date').str.strptime(pl.Date, '%Y-%m-%d')).set_sorted("Earnings_Date")
idx = fr["Date"].search_sorted(events["Earnings_Date"], "left")
fr = fr.with_columns(
pl.when(
pl.col("index").is_in(idx)
)
.then(True)
.otherwise(False)
.alias("Earnings")
)
fr = fr.join_asof(events, by="Symbol", left_on="Date", right_on="Earnings_Date")
fr = fr.with_columns(
pl.when(
pl.col("Earnings") == True
)
.then(pl.col("Event"))
.otherwise(False)
.alias("Event")
)