熊猫数据框创建新列并填充来自同一df的计算值

发布于 2021-01-29 15:08:23

这是我的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)…依此类推…请帮助

关注者
0
被浏览
99
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看