在Python Dataframe

时间:2017-06-12 16:00:51

标签: python pandas dataframe sum

我刚刚开始学习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列。

如果有人可以提供帮助,我会非常感激。请尝试尽可能地愚弄你的答案大声笑。

谢谢!

汤姆

2 个答案:

答案 0 :(得分:4)

使用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 知道无论如何都要跳过非数字列。

{{1}}

答案 1 :(得分:0)

l = ['VCIT' , VCLT' ,PCY' ... 'EWL']
Risk_Parity['sum'] = 0
for item in l:
    Risk_Parity['sum'] += Risk_Parity[item]