【问题标题】:Multiply two DF using numpy, calculate average per line使用 numpy 将两个 DF 相乘,计算每行的平均值
【发布时间】:2017-10-24 02:26:23
【问题描述】:

df: aux 包含布尔值,rtrnM 包含每月回报。我希望(分段)将 aux 和 rtrnM 相乘以获得 df ,其中 aux 为 TRUE 的每月回报,随后我想计算每行结果值的算术平均值。 这就是 aux 和 rtrnM 的样子:

In [341]: aux.tail()
Out[341]: 
              IWB    SPY    VGK    IEV    EWJ    EPP    IEF    SHY    IAU
2017-06-30  False  False   True   True   True  False  False  False  False
2017-07-31   True  False  False  False   True   True  False  False  False
2017-08-31  False  False   True   True  False   True  False  False  False
2017-09-29  False  False  False  False  False   True   True  False   True
2017-10-31   True  False   True   True  False  False  False  False  False

In [342]: rtrnM.tail()
Out[342]: 
                 IWB       SPY       VGK       IEV       EWJ       EPP  \
2017-06-30  0.007147  0.006374 -0.005148 -0.005326  0.013241  0.022903   
2017-07-31  0.019115  0.020554  0.028291  0.026850  0.020690  0.044065   
2017-08-31  0.003207  0.002918  0.000707 -0.000879 -0.000913  0.004091   
2017-09-29  0.020612  0.020141  0.032114  0.030790  0.018278 -0.008364   
2017-10-31  0.023163  0.023405  0.001372  0.003200  0.032490  0.024870   

                 IEF       SHY       IAU  
2017-06-30 -0.005097 -0.000786 -0.021311  
2017-07-31  0.003756  0.001860  0.023451  
2017-08-31  0.014574  0.002022  0.040917  
2017-09-29 -0.014407 -0.001867 -0.032233  
2017-10-31 -0.003018 -0.001037 -0.000812  

试过这个:

result = pd.DataFrame((aux * rtrnM).mean(axis=1),columns=['mthly'])

这并没有给我正确的结果。任何帮助,将不胜感激。猜测 numpy 是要走的路。

【问题讨论】:

    标签: python pandas numpy dataframe average


    【解决方案1】:

    是的,这里的 mean 为您提供了所有值的平均值,包括 0-vals。

    修复很简单。调用sum 并除以非零值的数量。

    (aux * rtrnM).sum(1) / aux.sum(1)
    
    2017-06-30    0.000922
    2017-07-31    0.027957
    2017-08-31    0.001306
    2017-09-29   -0.018335
    2017-10-31    0.009245
    dtype: float64
    

    像这样设计一个新的数据框:

    df = pd.DataFrame(aux.mul(rtrnM).sum(1).div(aux.sum(1)), columns=['mthly'])
    df
    
                   mthly
    2017-06-30  0.000922
    2017-07-31  0.027957
    2017-08-31  0.001306
    2017-09-29 -0.018335
    2017-10-31  0.009245
    

    【讨论】:

    • 太棒了。非常感谢。明确 sum(1) 是指每行的总和?
    • @steff 正确,它是沿第一个轴的总和。
    猜你喜欢
    • 1970-01-01
    • 2021-07-24
    • 2021-12-18
    • 2013-11-24
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    相关资源
    最近更新 更多