There is a dictionary array called band, and one key has multiple values.
For each key (Band 1, Band 2, Band 3) in this array, I would like to calculate the sum of the values that the key has.Below is the image of the result you want to print.
BandNum : Total
Band 1 : 57468
Band 2 : 65377
Band 3 : 62070
I tried to calculate using the sum function, but I got the following error.
TypeError: unsupported operand type(s) for +: 'int' and 'list'
"I think the error means ""int and list use + operator"", but I don't know how to solve this problem."
Thank you for your understanding.
The code is shown below.
import pandas as pd
df = pd.read_fwf('Histogram1.txt', header=None, names=['Band', 'DN', 'Npts', 'Total', 'Percent', 'Acc Pct'])
band = df.query('Band != "Histogram"').ffill().astype({'DN': int, 'Npts': int, 'Total': int, 'Percent': float, 'Acc Pct': float})\
.groupby('Band').apply(lambda x: x['DN'].repeat(x['Npts']).to_list()).to_dict()
print(band)
result = sum(band.values())
print(result)
Below is the first "Histogram1.txt" file to load.
Histogram DN Npts Total Percent Acc Pct
Band 1 178 1 1 0.3322 0.3322
179 2 3 0.6645 0.9967
180 3 6 0.9967 1.9934
181 6 12 1.9934 3.9867
182 8 20 2.6578 6.6445
183 10 30 3.3223 9.9668
184 10 40 3.3223 13.2890
185 11 51 3.6545 16.9435
186 10 61 3.3223 20.2658
187 21 82 6.9767 27.2425
188 25 107 8.3056 35.5482
189 26 133 8.6379 44.1860
190 23 156 7.6412 51.8272
191 20 176 6.6445 58.4718
192 20 196 6.6445 65.1163
193 9 205 2.9900 68.1063
194 8 213 2.6578 70.7641
195 13 226 4.3189 75.0831
196 19 245 6.3123 81.3953
197 11 256 3.6545 85.0498
198 12 268 3.9867 89.0365
199 12 280 3.9867 93.0233
200 6 286 1.9934 95.0166
201 3 289 0.9967 96.0133
202 6 295 1.9934 98.0066
203 4 299 1.3289 99.3355
204 2 301 0.6645 100.0000
Histogram DN Npts Total Percent Acc Pct
Band 2 208 1 1 0.3322 0.3322
209 4 5 1.3289 1.6611
210 9 14 2.9900 4.6512
211 12 26 3.9867 8.6379
212 28 54 9.3023 17.9402
213 38 92 12.6246 30.5648
214 11 103 3.6545 34.2193
215 24 127 7.9734 42.1927
216 24 151 7.9734 50.1661
217 23 174 7.6412 57.8073
218 12 186 3.9867 61.7940
219 15 201 4.9834 66.7774
220 16 217 5.3156 72.0930
221 15 232 4.9834 77.0764
222 18 250 5.9801 83.0565
223 10 260 3.3223 86.3787
224 17 277 5.6478 92.0266
225 13 290 4.3189 96.3455
226 4 294 1.3289 97.6744
227 3 297 0.9967 98.6711
228 4 301 1.3289 100.0000
Histogram DN Npts Total Percent Acc Pct
Band 3 193 1 1 0.3322 0.3322
194 3 4 0.9967 1.3289
195 3 7 0.9967 2.3256
196 7 14 2.3256 4.6512
197 9 23 2.9900 7.6412
198 17 40 5.6478 13.2890
199 6 46 1.9934 15.2824
200 12 58 3.9867 19.2691
201 26 84 8.6379 27.9070
202 20 104 6.6445 34.5515
203 15 119 4.9834 39.5349
204 15 134 4.9834 44.5183
205 14 148 4.6512 49.1694
206 16 164 5.3156 54.4850
207 18 182 5.9801 60.4651
208 14 196 4.6512 65.1163
209 13 209 4.3189 69.4352
210 8 217 2.6578 72.0930
211 16 233 5.3156 77.4086
212 7 240 2.3256 79.7342
213 14 254 4.6512 84.3854
214 16 270 5.3156 89.7010
215 6 276 1.9934 91.6944
216 4 280 1.3289 93.0233
217 7 287 2.3256 95.3488
218 2 289 0.6645 96.0133
219 2 291 0.6645 96.6777
220 3 294 0.9967 97.6744
221 2 296 0.6645 98.3389
222 0 296 0.0000 98.3389
223 2 298 0.6645 99.0033
224 3 301 0.9967 100.0000
The dictionary array band is shown below (some of them are omitted because they are long)
{'Band 1': [178, 179, 179, 180, 180, 180, 181, 181, 181, ...omitted..., 204, 204], 'Band 2': [208, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, ...omitted..., 228, 228, 228], 'Band 3': [193, 194, 196, 194, 194, 194, 194, 194, 196, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 194, 194, 194, 19
import pandas as pd
df = pd.read_fwf('Histogram1.txt', header=None, names=['Band', 'DN', 'Npts', 'Total', 'Percent', 'Acc Pct'])
band = df.query('Band != "Histogram"').ffill().astype({'DN': int, 'Npts': int, 'Total': int, 'Percent': float, 'Acc Pct': float})\
.groupby('Band').apply(lambda x: x['DN'].repeat(x['Npts']).to_list())
result = band.apply(sum).to_dict()
print(result)
# # {'Band 1': 57468, 'Band 2': 65377, 'Band 3': 62070}
##band = band.to_dict()
##print(band)
© 2024 OneMinuteCode. All rights reserved.