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很高兴我能帮上忙!如果你的问题解决了,请考虑把这个答案标记为接受。