【问题标题】:How to map values of one dataframe to asecond dataframes of different length using PANDAS如何使用 PANDAS 将一个数据帧的值映射到不同长度的第二个数据帧
【发布时间】:2019-11-22 07:50:37
【问题描述】:

我在如下数据框中有每日库存数据:

 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   

然后我将这些数据转换为每周库存数据,并按照以下方式执行计算(weekly_Final)

     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

我现在需要做的是获取每周最后一列,并将每周最后一列中的值映射到每日数据框中相应的 week_Number 以生成以下内容:

    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 语句,但我不断遇到与不同数据帧大小相关的错误。

提前致谢

【问题讨论】:

    标签: python pandas dataframe stock


    【解决方案1】:

    你可以这样做。

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

    查看pandas.merge()了解更多信息

    【讨论】:

    • 有道理,感谢您向我指出该功能。但是,我在尝试使用它时遇到了问题。我得到“KeyError:'Week_Number'”作为错误。我假设他的意思是它找不到名为 Week_number 的列。我使用以下方法从每日数据创建每周数据:weekly_data = daily_data.groupby(['Year', 'Week_Number']).agg( {'Open': 'first', 'High': 'max', 'Low ': 'min', 'Close': 'last', 'Volume': 'sum'}) 我不确定这是否会影响将周数引用为合并列名的能力
    • @harrisonhodge 用于对数据帧进行分组的列将被转换为索引,除非明确指定不这样做。所以在 groupby 函数中传递 'as_index=False'。 week_data = daily_data.groupby(['Year', 'Week_Number'], as_index=False).agg( {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close ': 'last', '卷': 'sum'})
    • @harrisonhodge 很高兴我能帮上忙!如果您的问题得到解决,请考虑将此答案标记为已接受。
    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 2017-04-06
    • 2017-04-20
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多