在Python Dataframe中汇总行


问题内容

我刚刚开始学习Python,因此如果这个问题在其他地方已经得到解答,请原谅我。我想创建一个名为“ Sum”的新列,该列将简单地添加到前面的列中。

Risk_Parity.tail()

    VCIT  VCLT  PCY     RWR     IJR     XLU     EWL
Date                            
2017-01-31  21.704155   11.733716   9.588649    8.278629    5.061788    7.010918    7.951747
2017-02-28  19.839319   10.748690   9.582891    7.548530    5.066478    7.453951    7.950232
2017-03-31  19.986782   10.754507   9.593623    7.370828    5.024079    7.402774    7.654366
2017-04-30  18.897307   11.102380   10.021139   9.666693    5.901137    7.398604    11.284331
2017-05-31  63.962659   23.670240   46.018698   9.917160    15.234977   12.344524   20.405587

表格中的列有些偏离,但是我所需要的只是(21.70 + 11.73 … + 7.95)我只能创建该列Risk_Parity['sum'] =,但是我迷路了。

我宁愿不必做 Risk_Parity['sum] = Risk_Parity['VCIT'] + Risk_Parity['VCLT']...

创建sum列后,我想将每一列除以sum列,然后将其放入一个新的数据框,该数据框将不包括sum列。

如果有人可以提供帮助,我将不胜感激。请尽量使您的答案变笨。

谢谢!

汤姆


问题答案:

sum与参数axis=1一起使用以指定行总和

Risk_Parity['Sum'] = Risk_Parity.sum(1)

创建的新副本而Risk_Parity无需在原始文档上写新列

Risk_Parity.assign(Sum= Risk_Parity.sum(1))

还要注意,我命名列Sum而不是sum。我这样做是为了避免与sum创建列所使用的相同方法冲突。


只包含数字列…但是,无论如何,我们都sum知道跳过非数字列。

RiskParity.assign(Sum=RiskParity.select_dtypes(['number']).sum(1))
# same as
# RiskParity.assign(Sum=RiskParity.sum(1))

             VCIT   VCLT    PCY   RWR    IJR    XLU    EWL     Sum
Date                                                              
2017-01-31  21.70  11.73   9.59  8.28   5.06   7.01   7.95   71.33
2017-02-28  19.84  10.75   9.58  7.55   5.07   7.45   7.95   68.19
2017-03-31  19.99  10.75   9.59  7.37   5.02   7.40   7.65   67.79
2017-04-30  18.90  11.10  10.02  9.67   5.90   7.40  11.28   74.27
2017-05-31  63.96  23.67  46.02  9.92  15.23  12.34  20.41  191.55