简体   繁体   中英

Sum of all columns except the ones specified in a list in Python

I have the below data for each ID:

id  ----    Base    AE      Val     LT  RO+ Prem    AM  TN  T3  AR
05  0       34.34   9.42    70.68   0   0   0   0   0   0   0
108 0       43.77   0       28      0   0   0   0   0   0   0
205 0       77.64   0       32.2    0   0   0   0   0   0   0
320 0       66.24   0       59.628  0   0   0   0   0   0   0
313 0       21.66   0       21.442  0   0   0   0   0   0   0
324 0       72.37   0       701.12  0   0   0   0   0   0   0
505 0       76.057  0       43.87   0   0   0   0   0   0   0

Now I want to find the sum of all columns except a few which I specify and the others separately into a column like below:

id  Base    Val     Others  Total
05  34.34   70.68   9.42    114.441387
108 43.77   28      0       71.77
205 77.64   32.2    0       109.84
320 66.24   59.628  0       125.868
313 21.66   21.442  0       43.102
324 72.37   701.12  0       773.49
505 76.057  43.87   0       119.927

So if my list of columns to keep:

cols_to_keep = ['Base','Val']

The other channels which are not part of this list,are to be summed up in Others Column and all the values in each row sum to Total. id is the index of the records.

I am able to keep the columns I declare in the list, but how to sum up the other columns except in the list in the Others column. Can someone please help me with this? The data is in a pandas df.

Drop the columns you do not wish to sum over:

df['Others'] = df.drop(cols_to_keep, axis=1).sum(axis=1)
df['Total'] = df.sum(axis=1)

Use assign , for filter columns use Index.difference :

cols_to_keep = ['Base','Val'] 

c = df.columns.difference(cols_to_keep)
df = df[cols_to_keep].assign(Others=df[c].sum(axis=1), Total=df.sum(1))
print (df)
       Base      Val  Others    Total
id                                   
5    34.340   70.680    9.42  114.440
108  43.770   28.000    0.00   71.770
205  77.640   32.200    0.00  109.840
320  66.240   59.628    0.00  125.868
313  21.660   21.442    0.00   43.102
324  72.370  701.120    0.00  773.490
505  76.057   43.870    0.00  119.927
In [47]: !cat b.txt | tr -s ' ' > data.txt
    ...: df = pd.read_csv("data.txt",sep=" ", dtype={'id':str})
    ...: df['Others'] = df['AE']
    ...: df['Total']  = df['Base'] + df['Others'] + df['Val']
    ...:
    ...: cols_to_keep=['id', 'Base', 'Val','Others','Total']
    ...: c = df.columns.difference(cols_to_keep)
    ...: df.drop(c, axis=1)
    ...: newDf = df.drop(c, axis=1)
    ...:

In [48]: newDf
Out[48]:
    id    Base      Val  Others    Total
0   05  34.340   70.680    9.42  114.440
1  108  43.770   28.000    0.00   71.770
2  205  77.640   32.200    0.00  109.840
3  320  66.240   59.628    0.00  125.868
4  313  21.660   21.442    0.00   43.102
5  324  72.370  701.120    0.00  773.490
6  505  76.057   43.870    0.00  119.927

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM