Python 如何使用PANDAS将一个数据帧的值映射到不同长度的第二个数据帧

Python 如何使用PANDAS将一个数据帧的值映射到不同长度的第二个数据帧,python,pandas,dataframe,stock,Python,Pandas,Dataframe,Stock,我在数据框中有每日股票数据,如下所示: Date Open High Low Close Volume Change Week_Number 1 2018-03-19 0.479304 0.479304 0.479304 0.479304 2050 -0.040000 12 2 2018-03-20 0.479304 0.479304 0.479304

我在数据框中有每日股票数据,如下所示:

 Date       Open      High       Low     Close    Volume    Change    Week_Number    
1   2018-03-19  0.479304  0.479304  0.479304  0.479304    2050 -0.040000           12             
2   2018-03-20  0.479304  0.479304  0.479304  0.479304       0  0.000000           12              
3   2018-03-21  0.499275  0.499275  0.489290  0.489290   28265  0.020833           12             
4   2018-03-22  0.489290  0.489290  0.489290  0.489290      75  0.000000           12               
5   2018-03-23  0.489290  0.489290  0.489290  0.489290       0  0.000000           12               
6   2018-03-26  0.489290  0.489290  0.479304  0.479304    7020 -0.020408           13               
7   2018-03-27  0.479304  0.479304  0.479304  0.479304       0  0.000000           13               
8   2018-03-28  0.474312  0.474312  0.474312  0.474312    2861 -0.010417           13               
9   2018-03-29  0.474312  0.474312  0.474312  0.474312       0  0.000000           13               
10  2018-03-30  0.474312  0.474312  0.474312  0.474312       0  0.000000           13               
11  2018-04-02  0.474312  0.474312  0.474312  0.474312       0  0.000000           14   
然后,我将这些数据转换为每周库存数据,并按照以下步骤进行计算(每周最终)

     Open      High       Low     Close   Volume    Change  Weekly_Final
Year Week_Number                                                                         
2018 12           0.479304  0.499275  0.479304  0.489290    30390       NaN             2
     13           0.489290  0.489290  0.474312  0.474312     9881 -0.030612             1
     14           0.474312  0.474312  0.474312  0.474312        0  0.000000             0
     15           0.474312  0.474312  0.449348  0.459333    40277 -0.031579             3
     16           0.459333  0.469319  0.459333  0.469319    10000  0.021739             0
我现在需要做的是获取weekly final列,并将weekly final中的值映射到daily dataframe中相应的weekly_编号,以生成以下内容:

    Date       Open      High       Low     Close    Volume    Change    Week_Number   Weekly_Final 
1   2018-03-19  0.479304  0.479304  0.479304  0.479304    2050 -0.040000           12             2
2   2018-03-20  0.479304  0.479304  0.479304  0.479304       0  0.000000           12             2 
3   2018-03-21  0.499275  0.499275  0.489290  0.489290   28265  0.020833           12             2
4   2018-03-22  0.489290  0.489290  0.489290  0.489290      75  0.000000           12             2  
5   2018-03-23  0.489290  0.489290  0.489290  0.489290       0  0.000000           12             2  
6   2018-03-26  0.489290  0.489290  0.479304  0.479304    7020 -0.020408           13             1  
7   2018-03-27  0.479304  0.479304  0.479304  0.479304       0  0.000000           13             1  
8   2018-03-28  0.474312  0.474312  0.474312  0.474312    2861 -0.010417           13             1  
9   2018-03-29  0.474312  0.474312  0.474312  0.474312       0  0.000000           13             1  
10  2018-03-30  0.474312  0.474312  0.474312  0.474312       0  0.000000           13             1  
11  2018-04-02  0.474312  0.474312  0.474312  0.474312       0  0.000000           14             0
我对python/pandas比较熟悉,到目前为止,我实现这一目标的尝试都失败了

我曾尝试使用
pd.np.where
语句,但不断遇到与不同数据帧大小相关的错误

提前感谢

您可以这样做

pd.merge(left=daily_stock_data, right=weekly_stock_data[['Week_Number', 'Weekly_Final']], how="inner", on="Week_Number")

查看更多有意义的

,感谢您向我指出该函数。然而,我在尝试使用它时遇到了一个问题。我得到“KeyError:‘Week_Number’”作为错误。我猜他的意思是它找不到名为Week_的号码。我使用:weekly_data=daily_data.groupby(['Year','Week_Number']).agg({'Open':'first','High':'max','Low':'min','Close':'last','Volume':'sum')从每日数据创建了每周数据我不确定这是否会影响将周数作为merge@harrisonhodge除非明确指定不将数据帧分组,否则用于分组数据帧的列将转换为索引。所以在groupby函数中传递'as_index=False'。每周数据=每日数据。groupby(['Year','Week'u Number'],as'u index=False)。agg({'Open':'first','High':'max','Low':'min','Close':'last','Volume':'sum')@harrisonhodge很高兴我能帮上忙!如果你的问题解决了,请考虑把这个答案标记为接受。