我刚刚开始学习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列。
如果有人可以提供帮助,我会非常感激。请尝试尽可能地愚弄你的答案大声笑。
谢谢!
汤姆
答案 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]