Python 用numpy乘以两个DF,计算每行的平均值
df:aux包含布尔值,rtrnM包含月度报表。我希望将aux和rtrnM分段相乘,得到每月收益的df,其中aux为真,随后我希望计算每行结果值的算术平均值。 这就是aux和rtrnM的外观: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
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正确,它是沿第一个轴的总和。