Python 用numpy乘以两个DF,计算每行的平均值

Python 用numpy乘以两个DF,计算每行的平均值,python,pandas,numpy,dataframe,average,Python,Pandas,Numpy,Dataframe,Average,df:aux包含布尔值,rtrnM包含月度报表。我希望将aux和rtrnM分段相乘,得到每月收益的df,其中aux为真,随后我希望计算每行结果值的算术平均值。 这就是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

df:aux包含布尔值,rtrnM包含月度报表。我希望将aux和rtrnM分段相乘,得到每月收益的df,其中aux为真,随后我希望计算每行结果值的算术平均值。 这就是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是一种方法。

是的,这里的平均值给出了所有值的平均值,包括0-VAL

修复很容易。调用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

伟大的非常感谢。要清楚,sum1表示每行的总和?@steff正确,它是沿第一个轴的总和。