在Pandas中,我有一个包含股票投资和开始日期的dataframe df1:
Stock,StartDate,Investment
A,2022-01-01,100
A,2022-02-01,150
B,2022-01-01,90
B,2022-01-15,100
...那我就有df2了
Stock,Date
A,2022-01-01
A,2022-01-02
A,2022-01-05
...
B,2022-01-01
...我想在df2中添加一列df2,其中装满了从df1获取的投资:给定日期d和df2中的股票S,我希望指定df1的投资日期d >= StartDate和d < next start date。
在这种情况下,预期输出(df2)是:
Stock,Date,Investment
A,2022-01-01,100
A,2022-01-02,100
A,2022-01-05,100
...
A,2022-01-31,100
A,2022-02-01,150
A,2022-02-02,150
...
B,2022-01-01,90
B,2022-01-02,90
...
B,2022-01-14,90
B,2022-01-15,100
B,2022-01-16,100
...这显然可以通过循环来完成,但我正在寻找一种更有效的方法,可能使用向量化。
做这件事最有效的方法是什么?
发布于 2022-07-19 09:10:44
使用merge_asof
print (df1)
a b c
0 A 2022-01-01 100
1 A 2022-02-01 150
2 B 2022-01-01 90
3 B 2022-01-15 100
print (df2)
a b
0 A 2022-01-01
1 A 2022-01-02
2 A 2022-01-05
3 B 2022-01-01
df = pd.merge_asof(df2.sort_values('b'), df1.sort_values('b'), on='b', by='a')
print (df)
a b c
0 A 2022-01-01 100
1 B 2022-01-01 90
2 A 2022-01-02 100
3 A 2022-01-05 100https://stackoverflow.com/questions/73034090
复制相似问题