在Pandas中,我有一个包含股票投资和开始日期的数据框架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
中添加一列Investment
,其中包含来自df1
的投资:给定df2
中的日期d
和股票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
...
这显然可以通过循环完成,但我正在寻找一种更有效的方法,可能使用向量化。
做这件事最有效的方法是什么?
iuc usemerge_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 100