pandas dataframe create new columns and fill with calculated values from same df

后端 未结 2 1773
既然无缘
既然无缘 2020-12-23 16:46

Here is a simplified example of my df:

ds = pd.DataFrame(np.abs(randn(3, 4)), index=[1,2,3], columns=[\'A\',\'B\',\'C\',\'D\'])
ds
      A         B                  


        
相关标签:
2条回答
  • 2020-12-23 17:32

    You can do this easily manually for each column like this:

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

    If you want to do this in one step for all columns, you can use the div method (http://pandas.pydata.org/pandas-docs/stable/basics.html#matching-broadcasting-behavior):

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

    And if you want this in one step added to the same dataframe:

    >>> 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  
    
    0 讨论(0)
  • 2020-12-23 17:35
    In [56]: df = pd.DataFrame(np.abs(randn(3, 4)), index=[1,2,3], columns=['A','B','C','D'])
    
    In [57]: df.divide(df.sum(axis=1), axis=0)
    Out[57]: 
              A         B         C         D
    1  0.319124  0.296653  0.138206  0.246017
    2  0.376994  0.326481  0.230464  0.066062
    3  0.036134  0.192954  0.430341  0.340571
    
    0 讨论(0)
提交回复
热议问题