python - Pandas 数据框创建新列并填充来自相同 df 的计算值

标签 python pandas calculated-columns

这是我的 df 的简化示例:

ds = pd.DataFrame(np.abs(randn(3, 4)), index=[1,2,3], columns=['A','B','C','D'])
ds
      A         B         C         D
1  1.099679  0.042043  0.083903  0.410128
2  0.268205  0.718933  1.459374  0.758887
3  0.680566  0.538655  0.038236  1.169403

我想逐行汇总列中的数据:

ds['sum']=ds.sum(axis=1)
ds
      A         B         C         D       sum
1  0.095389  0.556978  1.646888  1.959295  4.258550
2  1.076190  2.668270  0.825116  1.477040  6.046616
3  0.245034  1.066285  0.967124  0.791606  3.070049

现在,我的问题来了!我想创建 4 个新列并从每行的总数(总和)中计算百分比值。所以第一个新列中的第一个值应该是(0.095389/4.258550),第二个新列中的第一个值(0.556978/4.258550)......等等...... 请帮忙

最佳答案

您可以像这样轻松地为每一列手动执行此操作:

df['A_perc'] = df['A']/df['sum']

如果您想在一个步骤中对所有列执行此操作,可以使用 div 方法(http://pandas.pydata.org/pandas-docs/stable/basics.html#matching-broadcasting-behavior):

ds.div(ds['sum'], axis=0)

如果您希望一步将其添加到同一个数据框中:

>>> ds.join(ds.div(ds['sum'], axis=0), rsuffix='_perc')
          A         B         C         D       sum    A_perc    B_perc  \
1  0.151722  0.935917  1.033526  0.941962  3.063127  0.049532  0.305543   
2  0.033761  1.087302  1.110695  1.401260  3.633017  0.009293  0.299283   
3  0.761368  0.484268  0.026837  1.276130  2.548603  0.298739  0.190013   

     C_perc    D_perc  sum_perc  
1  0.337409  0.307517         1  
2  0.305722  0.385701         1  
3  0.010530  0.500718         1  

关于python - Pandas 数据框创建新列并填充来自相同 df 的计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18504967/

相关文章:

python - MongoDB 和 PyMongo : Upsert multiple values

python - 基于所有列扩展窗口的Pandas qcut

python - 将矩阵数组制作成矩阵的三元组数组/Python Pandas

mysql在select语句中的计算

ruby-on-rails-3 - 使用计算列对连接结果进行分页

Python - 迭代行和列

python - 在 Django 查询中收到 "missing FROM-clause"编程错误

python - 如何在 python 单元测试中模拟类变量值?

python - 如何在 python 中子处理此调用 : png2pos args >/dev/usb/lp0

python - Holoviews Heatmap 为每个点指定颜色