簡體   English   中英

除Python列表中指定的列外的所有列的總和

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

每個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

現在,我想找到所有列的總和,除了我指定的幾列和其他列分開的列,如下所示:

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

因此,如果我要保留的列列表:

cols_to_keep = ['Base','Val']

不屬於此列表的其他通道將在“其他”列中匯總,並且每行中的所有值總計為總計。 id是記錄的索引。

我能夠將我聲明的列保留在列表中,但是如何總結除“其他”列中的列表以外的其他列。 有人可以幫我嗎? 數據在pandas df中。

刪除不希望求和的列:

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

使用assign ,對於過濾器列,使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM