同事正在为怎样处理一个18万行的全年财务Excel文件发愁,文件足足有30M,打开文件也要两三分钟,于是他就向我求助。大概意思就是要筛选出Data工作簿“源数据”Sheet中所有收款人对应的付款人及付款笔数、金额小计,于是我简化做了一个表格,只有4个涉及到的列,随机数据200行用于测试。其实我也没好好学过pandas库的用法,只能边写代码边查库函数方法的帮助。
读者想测试的话把以下表格建一个Data.xlsx文件,放入工作表sheet改名为“源数据”:
| 记账授权号 | 付款人 | 收款人 | 摘要 | 金额 |
| 1 | Fondue Fred | Chris M. | 利息收入 | 659023.50 |
| 2 | Fondue Fred | cat u. | 奖金 | 686397.39 |
| 3 | Peppermint Grill | Erin C. | 利息收入 | 547630.80 |
| 4 | Viengvilay Thai Cuisine | Ronyde R. | 工资 | 729166.04 |
| 5 | Happy Valley | Steven C. | 利息收入 | 237085.82 |
| 6 | Pancho's | Elise B. | 午餐补助 | 445978.71 |
| 7 | Jasmine Thai | Kelly J. | 58789.61 | |
| 8 | Fondue Fred | Chris M. | 奖金 | 269656.77 |
| 9 | Peppermint Grill | cat u. | 电话费 | 461892.01 |
| 10 | Viengvilay Thai Cuisine | Erin C. | 利息收入 | 898460.26 |
| 11 | Happy Valley | Ronyde R. | 午餐补助 | 253800.23 |
| 12 | Pancho's | Steven C. | 369248.58 | |
| 13 | Peking Express | Elise B. | 午餐补助 | 909461.19 |
| 14 | Pho K & K | Kelly J. | 奖金 | 636912.13 |
| 15 | Momo Masala | Kreaky B. | 午餐补助 | 294433.29 |
| 16 | Happy Valley | Charles L. | 利息收入 | 98425.93 |
| 17 | Free Speech Movement Cafe | SV B. | 绩效奖 | 385952.70 |
| 18 | Sun Hong Kong Restaurant | Emmanuel K. | 电话费 | 298993.76 |
| 19 | Tivoli Caffe | Hayne P. | 奖金 | 362271.41 |
| 20 | Fondue Fred | Chester R. | 奖金 | 929680.70 |
| 21 | Pho K & K | Frank E. | 电话费 | 443264.47 |
| 22 | Momo Masala | ian B. | 利息收入 | 590357.56 |
| 23 | La Cascada Taqueria | Anand J. | 绩效奖 | 120278.90 |
| 24 | Free Speech Movement Cafe | Michelle C. | 电话费 | 363154.49 |
| 25 | Sun Hong Kong Restaurant | Connie L. | 奖金 | 772297.01 |
| 26 | Fondue Fred | Chester R. | 绩效奖 | 56434.60 |
| 27 | Jasmine Thai | Frank E. | 午餐补助 | 676935.11 |
| 28 | Fondue Fred | ian B. | 绩效奖 | 47426.88 |
| 29 | Peppermint Grill | Anand J. | 工资 | 26559.22 |
| 30 | Pancho's | Michelle C. | 午餐补助 | 829193.46 |
| 31 | Happy Valley | Connie L. | 午餐补助 | 790252.39 |
| 32 | Fondue Fred | Chris M. | 奖金 | 789003.64 |
| 33 | Peppermint Grill | cat u. | 工资 | 745933.99 |
| 34 | Viengvilay Thai Cuisine | Erin C. | 工资 | 236399.23 |
| 35 | Happy Valley | Ronyde R. | 电话费 | 586514.28 |
| 36 | Pancho's | Steven C. | 电话费 | 704429.85 |
| 37 | Peking Express | Elise B. | 利息收入 | 706649.53 |
| 38 | Pho K & K | Kelly J. | 利息收入 | 798905.40 |
| 39 | Pancho's | Kreaky B. | 午餐补助 | 123342.41 |
| 40 | Pancho's | Charles L. | 利息收入 | 684495.80 |
| 41 | Fondue Fred | SV B. | 工资 | 759880.77 |
| 42 | Peppermint Grill | Emmanuel K. | 奖金 | 164258.96 |
| 43 | Viengvilay Thai Cuisine | Chris M. | 午餐补助 | 450074.73 |
| 44 | Happy Valley | cat u. | 工资 | 732141.47 |
| 45 | Pancho's | Erin C. | 工资 | 382335.59 |
| 46 | Peking Express | Ronyde R. | 电话费 | 52157.74 |
| 47 | Pho K & K | Steven C. | 奖金 | 86584.79 |
| 48 | Pancho's | Elise B. | 工资 | 743686.70 |
| 49 | La Cascada Taqueria | Kelly J. | 利息收入 | 397502.25 |
| 50 | Free Speech Movement Cafe | Kreaky B. | 奖金 | 396860.39 |
| 51 | Fondue Fred | Chris M. | 利息收入 | 825482.56 |
| 52 | Fondue Fred | cat u. | 绩效奖 | 397166.24 |
| 53 | Jasmine Thai | Erin C. | 利息收入 | 116214.97 |
| 54 | Fondue Fred | Ronyde R. | 利息收入 | 478843.26 |
| 55 | Peppermint Grill | Steven C. | 绩效奖 | 607805.07 |
| 56 | Peking Express | Elise B. | 电话费 | 839463.59 |
| 57 | Happy Valley | Kelly J. | 绩效奖 | 552333.25 |
| 58 | Pancho's | Kreaky B. | 奖金 | 264649.21 |
| 59 | Pancho's | Charles L. | 工资 | 804044.64 |
| 60 | Pho K & K | SV B. | 电话费 | 188521.05 |
| 61 | Momo Masala | Emmanuel K. | 绩效奖 | 548395.28 |
| 62 | La Cascada Taqueria | Hayne P. | 电话费 | 320491.57 |
| 63 | Pancho's | Chester R. | 电话费 | 564264.20 |
| 64 | Jasmine Thai | Frank E. | 电话费 | 26548.08 |
| 65 | Fondue Fred | ian B. | 绩效奖 | 561130.01 |
| 66 | Peppermint Grill | Anand J. | 利息收入 | 310639.75 |
| 67 | Viengvilay Thai Cuisine | Michelle C. | 午餐补助 | 126372.01 |
| 68 | Happy Valley | Connie L. | 午餐补助 | 283743.91 |
| 69 | Pancho's | Charles L. | 利息收入 | 466645.47 |
| 70 | Peking Express | SV B. | 利息收入 | 790773.30 |
| 71 | Pho K & K | Emmanuel K. | 午餐补助 | 332421.10 |
| 72 | Momo Masala | Hayne P. | 电话费 | 304884.58 |
| 73 | La Cascada Taqueria | Chester R. | 午餐补助 | 478597.45 |
| 74 | Free Speech Movement Cafe | Frank E. | 电话费 | 38349.75 |
| 75 | Sun Hong Kong Restaurant | ian B. | 午餐补助 | 708450.80 |
| 76 | Jasmine Thai | Anand J. | 利息收入 | 352943.26 |
| 77 | Fondue Fred | Michelle C. | 电话费 | 84445.31 |
| 78 | Sun Hong Kong Restaurant | Connie L. | 利息收入 | 446377.36 |
| 79 | Viengvilay Thai Cuisine | Chris M. | 午餐补助 | 487447.24 |
| 80 | Happy Valley | cat u. | 工资 | 621560.18 |
| 81 | Pancho's | Erin C. | 绩效奖 | 738774.54 |
| 82 | Jasmine Thai | Ronyde R. | 午餐补助 | 878550.80 |
| 83 | Jasmine Thai | Steven C. | 工资 | 606650.62 |
| 84 | Pancho's | Elise B. | 利息收入 | 652152.47 |
| 85 | Peppermint Grill | Kelly J. | 绩效奖 | 49818.52 |
| 86 | Sun Hong Kong Restaurant | Kreaky B. | 奖金 | 553236.99 |
| 87 | Happy Valley | Charles L. | 奖金 | 753966.73 |
| 88 | Pancho's | SV B. | 奖金 | 349994.17 |
| 89 | Jasmine Thai | Emmanuel K. | 午餐补助 | 369869.21 |
| 90 | Fondue Fred | Hayne P. | 工资 | 901013.93 |
| 91 | Pancho's | Chester R. | 奖金 | 424058.34 |
| 92 | Viengvilay Thai Cuisine | Chris M. | 奖金 | 129926.48 |
| 93 | Happy Valley | cat u. | 工资 | 241263.49 |
| 94 | Pancho's | Erin C. | 利息收入 | 52658.55 |
| 95 | Peking Express | Ronyde R. | 利息收入 | 574086.39 |
| 96 | Pancho's | Steven C. | 奖金 | 329354.33 |
| 97 | Jasmine Thai | Elise B. | 电话费 | 772150.86 |
| 98 | Fondue Fred | Kelly J. | 绩效奖 | 778344.81 |
| 99 | Peppermint Grill | Kreaky B. | 工资 | 121135.05 |
| 100 | Happy Valley | Charles L. | 午餐补助 | 469759.67 |
| 101 | Happy Valley | Kreaky B. | 奖金 | 259231.87 |
| 102 | Pancho's | Charles L. | 利息收入 | 283332.19 |
| 103 | Peking Express | SV B. | 绩效奖 | 137020.38 |
| 104 | Pho K & K | Emmanuel K. | 绩效奖 | 17895.81 |
| 105 | Momo Masala | Hayne P. | 绩效奖 | 487485.09 |
| 106 | La Cascada Taqueria | Chester R. | 电话费 | 713075.82 |
| 107 | Free Speech Movement Cafe | Frank E. | 利息收入 | 516484.10 |
| 108 | Sun Hong Kong Restaurant | Chris M. | 绩效奖 | 388540.27 |
| 109 | Peppermint Grill | cat u. | 利息收入 | 821033.66 |
| 110 | Sun Hong Kong Restaurant | Erin C. | 电话费 | 141187.69 |
| 111 | Tivoli Caffe | Ronyde R. | 利息收入 | 548204.84 |
| 112 | Peking Express | Steven C. | 电话费 | 187591.63 |
| 113 | Peking Express | Elise B. | 绩效奖 | 422040.66 |
| 114 | Pho K & K | Kelly J. | 利息收入 | 899000.90 |
| 115 | Momo Masala | Kreaky B. | 奖金 | 860487.16 |
| 116 | Pancho's | Charles L. | 奖金 | 565460.00 |
| 117 | Jasmine Thai | SV B. | 电话费 | 534439.95 |
| 118 | Fondue Fred | Emmanuel K. | 利息收入 | 619974.15 |
| 119 | Sun Hong Kong Restaurant | Chris M. | 利息收入 | 274497.93 |
| 120 | Happy Valley | cat u. | 午餐补助 | 435219.80 |
| 121 | Happy Valley | Ronyde R. | 利息收入 | 845869.39 |
| 122 | Pancho's | Steven C. | 电话费 | 354800.67 |
| 123 | Peking Express | Elise B. | 电话费 | 953247.52 |
| 124 | Pho K & K | Kelly J. | 电话费 | 481924.05 |
| 125 | Momo Masala | Kreaky B. | 绩效奖 | 404013.01 |
| 126 | Happy Valley | Charles L. | 绩效奖 | 769668.63 |
| 127 | Free Speech Movement Cafe | SV B. | 利息收入 | 83031.82 |
| 128 | Sun Hong Kong Restaurant | Emmanuel K. | 奖金 | 631631.62 |
| 129 | Fondue Fred | Hayne P. | 绩效奖 | 736780.82 |
| 130 | Pancho's | Chester R. | 奖金 | 107541.96 |
| 131 | Viengvilay Thai Cuisine | Frank E. | 奖金 | 867043.05 |
| 132 | Happy Valley | ian B. | 利息收入 | 225032.17 |
| 133 | Jasmine Thai | Anand J. | 工资 | 826160.06 |
| 134 | Jasmine Thai | Michelle C. | 奖金 | 575971.60 |
| 135 | Happy Valley | Connie L. | 奖金 | 164416.13 |
| 136 | Jasmine Thai | Hayne P. | 奖金 | 919835.19 |
| 137 | Fondue Fred | Chester R. | 工资 | 554112.76 |
| 138 | Peppermint Grill | Frank E. | 电话费 | 370809.24 |
| 139 | Viengvilay Thai Cuisine | ian B. | 午餐补助 | 789340.74 |
| 140 | Jasmine Thai | Anand J. | 利息收入 | 982375.06 |
| 141 | Fondue Fred | Chris M. | 午餐补助 | 534441.78 |
| 142 | Fondue Fred | cat u. | 午餐补助 | 599801.16 |
| 143 | Pho K & K | Erin C. | 奖金 | 506099.20 |
| 144 | Momo Masala | Ronyde R. | 午餐补助 | 950946.03 |
| 145 | La Cascada Taqueria | Steven C. | 午餐补助 | 10551.28 |
| 146 | Free Speech Movement Cafe | Elise B. | 工资 | 229204.60 |
| 147 | Sun Hong Kong Restaurant | Kelly J. | 午餐补助 | 202276.01 |
| 148 | Fondue Fred | Kreaky B. | 奖金 | 763411.47 |
| 149 | Pancho's | Charles L. | 午餐补助 | 976836.74 |
| 150 | Viengvilay Thai Cuisine | SV B. | 午餐补助 | 496867.88 |
| 151 | Happy Valley | Emmanuel K. | 奖金 | 467356.72 |
| 152 | Pancho's | Hayne P. | 午餐补助 | 230336.90 |
| 153 | Pancho's | Chester R. | 奖金 | 98807.02 |
| 154 | Pancho's | Frank E. | 奖金 | 513703.80 |
| 155 | Sun Hong Kong Restaurant | Chris M. | 绩效奖 | 677359.51 |
| 156 | Peppermint Grill | cat u. | 奖金 | 466781.93 |
| 157 | Peppermint Grill | Erin C. | 奖金 | 494887.11 |
| 158 | Viengvilay Thai Cuisine | Ronyde R. | 绩效奖 | 176694.60 |
| 159 | Happy Valley | Steven C. | 电话费 | 494562.02 |
| 160 | Peking Express | Elise B. | 电话费 | 43667.96 |
| 161 | Peking Express | Kelly J. | 电话费 | 199455.64 |
| 162 | Pho K & K | Kreaky B. | 工资 | 930321.30 |
| 163 | Pancho's | Charles L. | 电话费 | 892934.57 |
| 164 | La Cascada Taqueria | SV B. | 绩效奖 | 945701.17 |
| 165 | Free Speech Movement Cafe | Emmanuel K. | 利息收入 | 791487.49 |
| 166 | Sun Hong Kong Restaurant | Hayne P. | 奖金 | 199182.63 |
| 167 | Pancho's | Chester R. | 利息收入 | 105630.46 |
| 168 | Jasmine Thai | Frank E. | 电话费 | 46840.53 |
| 169 | Fondue Fred | Chris M. | 电话费 | 75215.16 |
| 170 | Peppermint Grill | cat u. | 午餐补助 | 861472.27 |
| 171 | Viengvilay Thai Cuisine | Erin C. | 利息收入 | 941311.72 |
| 172 | Pancho's | Ronyde R. | 奖金 | 603782.56 |
| 173 | Jasmine Thai | Steven C. | 利息收入 | 223892.14 |
| 174 | Pancho's | Elise B. | 午餐补助 | 36541.45 |
| 175 | Peppermint Grill | Kelly J. | 工资 | 100469.71 |
| 176 | Viengvilay Thai Cuisine | Kreaky B. | 利息收入 | 972305.84 |
| 177 | Happy Valley | Charles L. | 电话费 | 121761.44 |
| 178 | Pancho's | SV B. | 奖金 | 554869.14 |
| 179 | Peking Express | Emmanuel K. | 午餐补助 | 743767.26 |
| 180 | Fondue Fred | Chris M. | 午餐补助 | 739773.58 |
| 181 | Peppermint Grill | cat u. | 利息收入 | 470961.71 |
| 182 | Fondue Fred | Chris M. | 奖金 | 914168.37 |
| 183 | Happy Valley | cat u. | 电话费 | 541571.45 |
| 184 | Sun Hong Kong Restaurant | Erin C. | 电话费 | 747813.23 |
| 185 | Pancho's | Ronyde R. | 工资 | 838643.84 |
| 186 | Jasmine Thai | Elise B. | 午餐补助 | 116906.23 |
| 187 | Fondue Fred | Kelly J. | 奖金 | 722424.95 |
| 188 | Peppermint Grill | Kreaky B. | 奖金 | 644490.34 |
| 189 | Pancho's | Charles L. | 午餐补助 | 569665.75 |
| 190 | Jasmine Thai | SV B. | 奖金 | 880038.11 |
| 191 | Fondue Fred | Emmanuel K. | 奖金 | 920473.88 |
| 192 | Fondue Fred | Chris M. | 电话费 | 845688.94 |
| 193 | Peppermint Grill | cat u. | 电话费 | 858955.41 |
| 194 | Fondue Fred | Chris M. | 绩效奖 | 938686.52 |
| 195 | Happy Valley | cat u. | 利息收入 | 527159.46 |
| 196 | Peking Express | Erin C. | 利息收入 | 954028.67 |
| 197 | Pho K & K | Ronyde R. | 午餐补助 | 612627.78 |
| 198 | Momo Masala | Steven C. | 奖金 | 543399.13 |
| 199 | Pancho's | Elise B. | 利息收入 | 401039.35 |
| 200 | La Cascada Taqueria | SV B. | 绩效奖 | 945701.17 |
程序执行后,输出的output.xlsx文件格式:
| 付款人 | 收款人 | 摘要 | 金额 | 笔数 | 总笔数 | 全部摘要 |
| SV B. | Viengvilay Thai Cuisine | 午餐补助 | 496867.88 | 1 | 13 | 午餐补助 |
| ian B. | Viengvilay Thai Cuisine | 午餐补助 | 789340.74 | 1 | 13 | 午餐补助 |
| Erin C. | Viengvilay Thai Cuisine | 利息收入 | 2076171.21 | 3 | 13 | 利息收入、工资 |
| Kreaky B. | Viengvilay Thai Cuisine | 利息收入 | 972305.84 | 1 | 13 | 利息收入 |
| Frank E. | Viengvilay Thai Cuisine | 奖金 | 867043.05 | 1 | 13 | 奖金 |
| Chris M. | Viengvilay Thai Cuisine | 午餐补助 | 1067448.45 | 3 | 13 | 奖金、午餐补助 |
| Michelle C. | Viengvilay Thai Cuisine | 午餐补助 | 126372.01 | 1 | 13 | 午餐补助 |
| Ronyde R. | Viengvilay Thai Cuisine | 工资 | 905860.64 | 2 | 13 | 工资、绩效奖 |
| SV B. | La Cascada Taqueria | 绩效奖 | 1891402.34 | 2 | 8 | 绩效奖 |
| Kelly J. | La Cascada Taqueria | 利息收入 | 397502.25 | 1 | 8 | 利息收入 |
| Steven C. | La Cascada Taqueria | 午餐补助 | 10551.28 | 1 | 8 | 午餐补助 |
| Hayne P. | La Cascada Taqueria | 电话费 | 320491.57 | 1 | 8 | 电话费 |
| Chester R. | La Cascada Taqueria | 午餐补助 | 1191673.27 | 2 | 8 | 电话费、午餐补助 |
| Anand J. | La Cascada Taqueria | 绩效奖 | 120278.9 | 1 | 8 | 绩效奖 |
| SV B. | Free Speech Movement Cafe | 绩效奖 | 468984.52 | 2 | 8 | 利息收入、绩效奖 |
| Kreaky B. | Free Speech Movement Cafe | 奖金 | 396860.39 | 1 | 8 | 奖金 |
| Elise B. | Free Speech Movement Cafe | 工资 | 229204.6 | 1 | 8 | 工资 |
| Frank E. | Free Speech Movement Cafe | 电话费 | 554833.85 | 2 | 8 | 电话费、利息收入 |
| Emmanuel K. | Free Speech Movement Cafe | 利息收入 | 791487.49 | 1 | 8 | 利息收入 |
| Michelle C. | Free Speech Movement Cafe | 电话费 | 363154.49 | 1 | 8 | 电话费 |
| SV B. | Fondue Fred | 工资 | 759880.77 | 1 | 28 | 工资 |
| ian B. | Fondue Fred | 绩效奖 | 608556.89 | 2 | 28 | 绩效奖 |
| Kreaky B. | Fondue Fred | 奖金 | 763411.47 | 1 | 28 | 奖金 |
| cat u. | Fondue Fred | 奖金 | 1683364.79 | 3 | 28 | 午餐补助、奖金、绩效奖 |
| Hayne P. | Fondue Fred | 工资 | 1637794.75 | 2 | 28 | 工资、绩效奖 |
| Emmanuel K. | Fondue Fred | 利息收入 | 1540448.03 | 2 | 28 | 利息收入、奖金 |
| Chris M. | Fondue Fred | 利息收入 | 6591140.82 | 10 | 28 | 利息收入、电话费、奖金、午餐补助、绩效奖 |
| Chester R. | Fondue Fred | 奖金 | 1540228.06 | 3 | 28 | 奖金、绩效奖、工资 |
| Kelly J. | Fondue Fred | 绩效奖 | 1500769.76 | 2 | 28 | 奖金、绩效奖 |
| Ronyde R. | Fondue Fred | 利息收入 | 478843.26 | 1 | 28 | 利息收入 |
| Michelle C. | Fondue Fred | 电话费 | 84445.31 | 1 | 28 | 电话费 |
| Connie L. | Sun Hong Kong Restaurant | 奖金 | 1218674.37 | 2 | 13 | 利息收入、奖金 |
| ian B. | Sun Hong Kong Restaurant | 午餐补助 | 708450.8 | 1 | 13 | 午餐补助 |
| Erin C. | Sun Hong Kong Restaurant | 电话费 | 889000.92 | 2 | 13 | 电话费 |
| Kreaky B. | Sun Hong Kong Restaurant | 奖金 | 553236.99 | 1 | 13 | 奖金 |
| Hayne P. | Sun Hong Kong Restaurant | 奖金 | 199182.63 | 1 | 13 | 奖金 |
| Emmanuel K. | Sun Hong Kong Restaurant | 电话费 | 930625.38 | 2 | 13 | 电话费、奖金 |
| Chris M. | Sun Hong Kong Restaurant | 绩效奖 | 1340397.71 | 3 | 13 | 利息收入、绩效奖 |
| Kelly J. | Sun Hong Kong Restaurant | 午餐补助 | 202276.01 | 1 | 13 | 午餐补助 |
| SV B. | Pancho's | 奖金 | 904863.31 | 2 | 34 | 奖金 |
| Erin C. | Pancho's | 工资 | 1173768.68 | 3 | 34 | 利息收入、工资、绩效奖 |
| Kreaky B. | Pancho's | 午餐补助 | 387991.62 | 2 | 34 | 奖金、午餐补助 |
| Elise B. | Pancho's | 午餐补助 | 2279398.68 | 5 | 34 | 利息收入、工资、午餐补助 |
| Charles L. | Pancho's | 利息收入 | 5243415.16 | 8 | 34 | 利息收入、电话费、工资、奖金、午餐补助 |
| Chester R. | Pancho's | 电话费 | 1300301.98 | 5 | 34 | 电话费、利息收入、奖金 |
| Hayne P. | Pancho's | 午餐补助 | 230336.9 | 1 | 34 | 午餐补助 |
| Frank E. | Pancho's | 奖金 | 513703.8 | 1 | 34 | 奖金 |
| Michelle C. | Pancho's | 午餐补助 | 829193.46 | 1 | 34 | 午餐补助 |
| Steven C. | Pancho's | 空值 | 1757833.43 | 4 | 34 | 电话费、奖金、空值 |
| Ronyde R. | Pancho's | 奖金 | 1442426.4 | 2 | 34 | 奖金、工资 |
| ian B. | Momo Masala | 利息收入 | 590357.56 | 1 | 9 | 利息收入 |
| Kreaky B. | Momo Masala | 午餐补助 | 1558933.46 | 3 | 9 | 奖金、午餐补助、绩效奖 |
| Hayne P. | Momo Masala | 电话费 | 792369.67 | 2 | 9 | 电话费、绩效奖 |
| Emmanuel K. | Momo Masala | 绩效奖 | 548395.28 | 1 | 9 | 绩效奖 |
| Steven C. | Momo Masala | 奖金 | 543399.13 | 1 | 9 | 奖金 |
| Ronyde R. | Momo Masala | 午餐补助 | 950946.03 | 1 | 9 | 午餐补助 |
| Connie L. | Happy Valley | 午餐补助 | 1238412.43 | 3 | 23 | 奖金、午餐补助 |
| ian B. | Happy Valley | 利息收入 | 225032.17 | 1 | 23 | 利息收入 |
| Kelly J. | Happy Valley | 绩效奖 | 552333.25 | 1 | 23 | 绩效奖 |
| Kreaky B. | Happy Valley | 奖金 | 259231.87 | 1 | 23 | 奖金 |
| cat u. | Happy Valley | 工资 | 3098915.85 | 6 | 23 | 电话费、利息收入、工资、午餐补助 |
| Charles L. | Happy Valley | 利息收入 | 2213582.4 | 5 | 23 | 利息收入、电话费、奖金、午餐补助、绩效奖 |
| Emmanuel K. | Happy Valley | 奖金 | 467356.72 | 1 | 23 | 奖金 |
| Steven C. | Happy Valley | 利息收入 | 731647.84 | 2 | 23 | 利息收入、电话费 |
| Ronyde R. | Happy Valley | 午餐补助 | 1686183.9 | 3 | 23 | 电话费、利息收入、午餐补助 |
| Anand J. | Jasmine Thai | 利息收入 | 2161478.38 | 3 | 18 | 利息收入、工资 |
| SV B. | Jasmine Thai | 电话费 | 1414478.06 | 2 | 18 | 电话费、奖金 |
| Erin C. | Jasmine Thai | 利息收入 | 116214.97 | 1 | 18 | 利息收入 |
| Elise B. | Jasmine Thai | 电话费 | 889057.09 | 2 | 18 | 电话费、午餐补助 |
| Steven C. | Jasmine Thai | 工资 | 830542.76 | 2 | 18 | 利息收入、工资 |
| Hayne P. | Jasmine Thai | 奖金 | 919835.19 | 1 | 18 | 奖金 |
| Emmanuel K. | Jasmine Thai | 午餐补助 | 369869.21 | 1 | 18 | 午餐补助 |
| Frank E. | Jasmine Thai | 午餐补助 | 750323.72 | 3 | 18 | 电话费、午餐补助 |
| Kelly J. | Jasmine Thai | 空值 | 58789.61 | 1 | 18 | 空值 |
| Ronyde R. | Jasmine Thai | 午餐补助 | 878550.8 | 1 | 18 | 午餐补助 |
| Michelle C. | Jasmine Thai | 奖金 | 575971.6 | 1 | 18 | 奖金 |
| Hayne P. | Tivoli Caffe | 奖金 | 362271.41 | 1 | 2 | 奖金 |
| Ronyde R. | Tivoli Caffe | 利息收入 | 548204.84 | 1 | 2 | 利息收入 |
| SV B. | Peking Express | 利息收入 | 927793.68 | 2 | 14 | 利息收入、绩效奖 |
| Erin C. | Peking Express | 利息收入 | 954028.67 | 1 | 14 | 利息收入 |
| Kelly J. | Peking Express | 电话费 | 199455.64 | 1 | 14 | 电话费 |
| Elise B. | Peking Express | 午餐补助 | 3874530.45 | 6 | 14 | 利息收入、电话费、午餐补助、绩效奖 |
| Emmanuel K. | Peking Express | 午餐补助 | 743767.26 | 1 | 14 | 午餐补助 |
| Steven C. | Peking Express | 电话费 | 187591.63 | 1 | 14 | 电话费 |
| Ronyde R. | Peking Express | 电话费 | 626244.13 | 2 | 14 | 电话费、利息收入 |
| SV B. | Pho K & K | 电话费 | 188521.05 | 1 | 12 | 电话费 |
| Erin C. | Pho K & K | 奖金 | 506099.2 | 1 | 12 | 奖金 |
| Kreaky B. | Pho K & K | 工资 | 930321.3 | 1 | 12 | 工资 |
| Steven C. | Pho K & K | 奖金 | 86584.79 | 1 | 12 | 奖金 |
| Emmanuel K. | Pho K & K | 午餐补助 | 350316.91 | 2 | 12 | 绩效奖、午餐补助 |
| Frank E. | Pho K & K | 电话费 | 443264.47 | 1 | 12 | 电话费 |
| Kelly J. | Pho K & K | 奖金 | 2816742.48 | 4 | 12 | 利息收入、奖金、电话费 |
| Ronyde R. | Pho K & K | 午餐补助 | 612627.78 | 1 | 12 | 午餐补助 |
| Anand J. | Peppermint Grill | 工资 | 337198.97 | 2 | 18 | 利息收入、工资 |
| Erin C. | Peppermint Grill | 利息收入 | 1042517.91 | 2 | 18 | 利息收入、奖金 |
| Kelly J. | Peppermint Grill | 绩效奖 | 150288.23 | 2 | 18 | 工资、绩效奖 |
| Kreaky B. | Peppermint Grill | 工资 | 765625.39 | 2 | 18 | 工资、奖金 |
| cat u. | Peppermint Grill | 电话费 | 4687030.98 | 7 | 18 | 电话费、利息收入、工资、奖金、午餐补助 |
| Emmanuel K. | Peppermint Grill | 奖金 | 164258.96 | 1 | 18 | 奖金 |
| Frank E. | Peppermint Grill | 电话费 | 370809.24 | 1 | 18 | 电话费 |
| Steven C. | Peppermint Grill | 绩效奖 | 607805.07 | 1 | 18 | 绩效奖 |
源代码20行(其中有6行是测试用时的代码可以去除)如下:
import time, pandas as pd
def tprint(info): print(info); return time.time()
t1 = tprint('正在读取数据,请稍候...')
df = pd.read_excel('data.xlsx', sheet_name='源数据')
t2 = tprint('正在数据计算,请稍候...')
ls, label = [], ('付款人','收款人','摘要','金额','笔数','总笔数','全部摘要')
for 收款人 in set(df.收款人):
付款人 = df[df.收款人==收款人].付款人
总笔数 = 付款人.shape[0]
for 付款人 in set(付款人):
数集 = df[(df.收款人==收款人) & (df.付款人==付款人)].fillna('空值')
笔数, 金额 = 数集.shape[0], 数集.金额.sum().round(2)
摘要,全部摘要 = 数集.摘要.iloc()[0], "、".join(set(数集.摘要))
ls.append('~'.join(map(str,(eval(_) for _ in label))).split("~"))
data = pd.DataFrame(ls, columns=label)
data.金额, data.笔数, data.总笔数 = data.金额.astype('float'),data.笔数.astype('int'),data.总笔数.astype('int')
t3 = tprint('正在写入文件,请稍候...')
data.to_excel('output.xlsx', sheet_name='Sheet1',index=False)
t4 = time.time()
print(f'读取耗时:{t2-t1:.3f}s\n计算耗时:{t3-t2:.3f}s\n写入耗时:{t4-t3:.3f}s\n共计耗时:{t4-t1:.3f}s')
测试效果:
正在读取数据,请稍候...
正在数据计算,请稍候...
正在写入文件,请稍候...
读取耗时:0.859s
计算耗时:0.314s
写入耗时:0.063s
共计耗时:1.236s
处理那个30M的文件时,因为列名一样,都不用改代码。实测读取用了58秒,计算用1600秒,共计用时28分钟左右,完美完成筛选任务。
边学边写的代码,可能就根本没用到pandas的精华所在。但也谈谈代码中几个注意点:
1. python 支持中文名变量,直接用列名作变量有好处,省得注释以及想很多变量名称来命名。
2. DataFrame筛选条件的逻辑运算用 & | ,其运算级别高于><==,所以括号不能省。如代码中的: df[(df.收款人==收款人) & (df.付款人==付款人)]
3. 取DataFrame的列,可以用 df['收款人'] 也能用 df.收款人,我觉得用后者更方便点。
4. 源数据“摘要”列中有空单元格,读入DataFrame中后其值为nan,这个起先没注意到代码一直报错。后查询到df有.fillna()方法可以替换掉空值。
5. 求行数可以直接用len(df)求,也可用df.shape()方法返回一个元组:(行数、列数)。
6. 行数据我用了一句代码 '~'.join(map(str,(eval(_) for _ in label))).split("~") 合并后分割成列表。
7. 数值类型的列都要用.astype()转回相应的数值类型,否则得到的.xlsx文件中数值列都是文本型数字(Excel中表现为单元格左上角有绿色小三角),不便于统计合计数。如:
data.金额 = data.金额.astype('float')
data.笔数 = data.笔数.astype('int')
(本文完)
附pandas学习图一张:




















