Интерполировать данные, используя образцы графиков - PullRequest
0 голосов
/ 05 марта 2020

Проблема

Мне нужно вычислить значения из данных выборок, и я не эксперт с pandas.

Вся информация представлена ​​в двух pandas данных. Первый (именуемый tiges) содержит данные из выборочных графиков (один идентификатор -> ID_PE), второй фрейм данных (именуемый weights) - вес (POIDS_PE) каждого образца в расчете на GEOCODE ( одиночные идентификаторы древостоев). Весовые коэффициенты получены с использованием алгоритма knn, но здесь это не имеет значения.

>>> print(weights.head())
                GEOCODE       ID_PE  POIDS_PE
0  -158170,19+364636,34  1701103901  0.051027
1  -158170,19+364636,34  1701103902  0.051027
2  -158170,19+364636,34  1701104002  0.061295
3  -158170,19+364636,34  1701104003  0.061295
4  -158170,19+364636,34  1701104602  0.104095

>>> print(tiges.head())
        ID_PE ESSENCE CL_DHP CL_QUAL  VMB_HA  TIGE_HA  ST_HA
0  0300600101     BOJ    012       -   2.714       50  0.614
1  0300600101     BOJ    016       -   3.014       25  0.554
2  0300600101     BOJ    018       -   4.102       25  0.643
3  0300600101     BOJ    020       -   5.040       25  0.747
4  0300600101     BOJ    024       C  15.552       50  2.367

Сумма весов выборочного графика для каждого геокода равна 1, а выборочный график используется для нескольких геокодов.

geocode = '-158170,19+364636,34' # or any existing geocode in weights['GEOCODE'].unique()
weights.loc[geocode]['POIDS_PE'].sum() # Will always return 1

Необходимый вывод - тот же DataFrame, что и samples, но для геокодов. Переменные для расчета: VMB_HA, TIGE_HA, ST_HA. Другие столбцы используются для группировки информации

>>> desired_output.head()
                GEOCODE ESSENCE CL_QUAL CL_DHP  TIGE_HA    ST_HA   VMB_HA
0  -158170,19+364636,34     BOJ       -    010   30.805  0.24353  0.66234
1  -158170,19+364636,34     BOJ       -    012   12.745  0.15088  0.58345
2  -158170,19+364636,34     BOJ       -    014   16.286  0.25070  1.14886
3  -158170,19+364636,34     BOJ       -    016   15.373  0.31142  1.76498
4  -158170,19+364636,34     BOJ       -    018   14.744  0.37584  2.41429
....

Пример данных для одного геокода и связанных образцов графиков

Осторожно, много символов для _t

_w = {'ID_PE': {0: u'1701103901', 1: u'1701103902', 2: u'1701104002', 3: u'1701104003', 4: u'1701104602', 5: u'1701105103', 6: u'1701106103', 7: u'1701107002', 8: u'1701107103', 9: u'1701107104', 10: u'1701107201', 11: u'1701107203', 12: u'1701107503'}, 'GEOCODE': {0: u'-158170,19+364636,34', 1: u'-158170,19+364636,34', 2: u'-158170,19+364636,34', 3: u'-158170,19+364636,34', 4: u'-158170,19+364636,34', 5: u'-158170,19+364636,34', 6: u'-158170,19+364636,34', 7: u'-158170,19+364636,34', 8: u'-158170,19+364636,34', 9: u'-158170,19+364636,34', 10: u'-158170,19+364636,34', 11: u'-158170,19+364636,34', 12: u'-158170,19+364636,34'}, 'POIDS_PE': {0: 0.051026690899999998, 1: 0.051026690899999998, 2: 0.061295371699999997, 3: 0.061295371699999997, 4: 0.1040946, 5: 0.1035762336, 6: 0.091579987000000002, 7: 0.090075644299999993, 8: 0.092626642199999998, 9: 0.092639292499999998, 10: 0.054690826900000003, 11: 0.054690826900000003, 12: 0.091381821200000005}}
weights = pd.DataFrame(_w)

_t = {'ID_PE': {12809: u'1701107203', 12810: u'1701107203', 12811: u'1701107203', 12812: u'1701107203', 12813: u'1701107203', 12814: u'1701107203', 12815: u'1701107203', 12816: u'1701107203', 12817: u'1701107203', 12753: u'1701107104', 12819: u'1701107203', 12820: u'1701107203', 12821: u'1701107203', 12822: u'1701107203', 12823: u'1701107203', 12824: u'1701107203', 10779: u'1701104002', 10780: u'1701104002', 10781: u'1701104002', 10782: u'1701104002', 10783: u'1701104002', 10784: u'1701104002', 10785: u'1701104002', 10786: u'1701104002', 10787: u'1701104002', 10788: u'1701104002', 10789: u'1701104002', 10790: u'1701104003', 10791: u'1701104003', 10792: u'1701104003', 10793: u'1701104003', 10794: u'1701104003', 10795: u'1701104003', 10796: u'1701104003', 10797: u'1701104003', 10798: u'1701104003', 12754: u'1701107104', 12638: u'1701107002', 12639: u'1701107002', 12640: u'1701107002', 12641: u'1701107002', 12642: u'1701107002', 12755: u'1701107104', 12643: u'1701107002', 13028: u'1701107503', 12644: u'1701107002', 12645: u'1701107002', 12646: u'1701107002', 12647: u'1701107002', 12818: u'1701107203', 12733: u'1701107103', 12648: u'1701107002', 13029: u'1701107503', 12734: u'1701107103', 12649: u'1701107002', 12735: u'1701107103', 12736: u'1701107103', 12737: u'1701107103', 12738: u'1701107103', 13030: u'1701107503', 13013: u'1701107503', 12739: u'1701107103', 12740: u'1701107103', 11419: u'1701105103', 11420: u'1701105103', 11421: u'1701105103', 11422: u'1701105103', 11423: u'1701105103', 11424: u'1701105103', 11425: u'1701105103', 11426: u'1701105103', 11427: u'1701105103', 11428: u'1701105103', 11429: u'1701105103', 11430: u'1701105103', 11431: u'1701105103', 11432: u'1701105103', 11433: u'1701105103', 12741: u'1701107103', 12743: u'1701107103', 13031: u'1701107503', 12744: u'1701107104', 12745: u'1701107104', 12746: u'1701107104', 12747: u'1701107104', 12742: u'1701107103', 12748: u'1701107104', 12749: u'1701107104', 12750: u'1701107104', 13014: u'1701107503', 13015: u'1701107503', 13016: u'1701107503', 13017: u'1701107503', 13018: u'1701107503', 12751: u'1701107104', 13020: u'1701107503', 13021: u'1701107503', 13022: u'1701107503', 11999: u'1701106103', 12000: u'1701106103', 12001: u'1701106103', 12002: u'1701106103', 12003: u'1701106103', 12004: u'1701106103', 12005: u'1701106103', 12006: u'1701106103', 12007: u'1701106103', 12008: u'1701106103', 12009: u'1701106103', 12010: u'1701106103', 12011: u'1701106103', 12012: u'1701106103', 12013: u'1701106103', 12014: u'1701106103', 12015: u'1701106103', 12016: u'1701106103', 12017: u'1701106103', 12018: u'1701106103', 12019: u'1701106103', 12020: u'1701106103', 12021: u'1701106103', 12022: u'1701106103', 12023: u'1701106103', 12024: u'1701106103', 12756: u'1701107104', 12757: u'1701107104', 12758: u'1701107104', 12759: u'1701107104', 12760: u'1701107104', 12761: u'1701107104', 12762: u'1701107104', 13019: u'1701107503', 13023: u'1701107503', 13024: u'1701107503', 13025: u'1701107503', 13026: u'1701107503', 13027: u'1701107503', 12630: u'1701107002', 12631: u'1701107002', 12632: u'1701107002', 12633: u'1701107002', 12634: u'1701107002', 12635: u'1701107002', 12636: u'1701107002', 12637: u'1701107002', 11102: u'1701104602', 11103: u'1701104602', 11104: u'1701104602', 11105: u'1701104602', 11106: u'1701104602', 11107: u'1701104602', 11108: u'1701104602', 11109: u'1701104602', 11110: u'1701104602', 11111: u'1701104602', 11112: u'1701104602', 11113: u'1701104602', 11114: u'1701104602', 11115: u'1701104602', 11116: u'1701104602', 12728: u'1701107103', 12729: u'1701107103', 12730: u'1701107103', 12731: u'1701107103', 12732: u'1701107103', 10685: u'1701103901', 10686: u'1701103901', 10687: u'1701103901', 10688: u'1701103901', 10689: u'1701103901', 10690: u'1701103901', 10691: u'1701103901', 10692: u'1701103901', 10693: u'1701103901', 10694: u'1701103901', 10695: u'1701103901', 10696: u'1701103901', 10697: u'1701103902', 10698: u'1701103902', 10699: u'1701103902', 10700: u'1701103902', 10701: u'1701103902', 10702: u'1701103902', 10703: u'1701103902', 10704: u'1701103902', 10705: u'1701103902', 10706: u'1701103902', 10707: u'1701103902', 10708: u'1701103902', 10709: u'1701103902', 10710: u'1701103902', 10711: u'1701103902', 10712: u'1701103902', 10713: u'1701103902', 10714: u'1701103902', 12763: u'1701107104', 12764: u'1701107104', 12765: u'1701107104', 12766: u'1701107104', 12767: u'1701107201', 12768: u'1701107201', 12769: u'1701107201', 12770: u'1701107201', 12771: u'1701107201', 12772: u'1701107201', 12773: u'1701107201', 12774: u'1701107201', 12775: u'1701107201', 12776: u'1701107201', 12777: u'1701107201', 12778: u'1701107201', 12779: u'1701107201', 12780: u'1701107201', 12781: u'1701107201', 12782: u'1701107201', 12752: u'1701107104'}, 'ST_HA': {12809: 0.196, 12810: 0.636, 12811: 1.287, 12812: 2.764, 12813: 2.717, 12814: 5.147, 12815: 12.069, 12816: 0.385, 12817: 0.196, 12753: 1.539, 12819: 0.389, 12820: 0.385, 12821: 0.636, 12822: 1.217, 12823: 1.539, 12824: 2.433, 10779: 0.817, 10780: 1.453, 10781: 3.398, 10782: 1.453, 10783: 3.142, 10784: 0.166, 10785: 1.006, 10786: 0.95, 10787: 2.358, 10788: 1.606, 10789: 1.815, 10790: 0.801, 10791: 0.95, 10792: 1.496, 10793: 1.815, 10794: 0.196, 10795: 0.189, 10796: 0.503, 10797: 0.636, 10798: 1.122, 12754: 0.264, 12638: 0.385, 12639: 2.433, 12640: 0.774, 12641: 0.283, 12642: 0.385, 12755: 0.77, 12643: 0.636, 13028: 1.131, 12644: 0.95, 12645: 0.589, 12646: 1.272, 12647: 0.785, 12818: 0.283, 12733: 2.262, 12648: 1.901, 13029: 1.815, 12734: 1.297, 12649: 3.534, 12735: 3.941, 12736: 1.767, 12737: 0.43, 12738: 0.283, 13030: 1.327, 13013: 0.283, 12739: 0.636, 12740: 2.262, 11419: 1.539, 11420: 1.453, 11421: 2.011, 11422: 0.196, 11423: 0.561, 11424: 1.005, 11425: 1.308, 11426: 0.793, 11427: 1.901, 11428: 2.655, 11429: 1.539, 11430: 3.534, 11431: 2.574, 11432: 1.487, 11433: 2.011, 12741: 2.433, 12743: 0.95, 13031: 0.581, 12744: 0.196, 12745: 0.283, 12746: 0.385, 12747: 0.503, 12742: 0.785, 12748: 0.636, 12749: 1.287, 12750: 0.196, 13014: 0.385, 13015: 0.528, 13016: 0.785, 13017: 1.131, 13018: 1.327, 12751: 0.374, 13020: 1.287, 13021: 0.841, 13022: 0.393, 11999: 0.196, 12000: 0.898, 12001: 0.77, 12002: 1.005, 12003: 1.287, 12004: 8.867, 12005: 0.503, 12006: 0.636, 12007: 0.283, 12008: 0.385, 12009: 0.503, 12010: 0.785, 12011: 0.95, 12012: 0.196, 12013: 0.332, 12014: 1.005, 12015: 1.272, 12016: 1.131, 12017: 1.629, 12018: 2.011, 12019: 1.327, 12020: 0.877, 12021: 0.385, 12022: 0.636, 12023: 1.327, 12024: 1.287, 12756: 0.503, 12757: 0.95, 12758: 4.034, 12759: 1.629, 12760: 1.815, 12761: 0.196, 12762: 0.95, 13019: 1.606, 13023: 0.283, 13024: 0.385, 13025: 0.636, 13026: 1.571, 13027: 0.95, 12630: 0.774, 12631: 0.77, 12632: 1.131, 12633: 1.247, 12634: 1.287, 12635: 1.629, 12636: 0.393, 12637: 0.83, 11102: 0.385, 11103: 0.503, 11104: 0.636, 11105: 0.785, 11106: 1.901, 11107: 1.131, 11108: 1.327, 11109: 1.767, 11110: 1.393, 11111: 5.521, 11112: 0.196, 11113: 0.238, 11114: 0.533, 11115: 0.785, 11116: 1.453, 12728: 0.814, 12729: 0.503, 12730: 1.279, 12731: 3.142, 12732: 1.901, 10685: 0.393, 10686: 0.503, 10687: 1.909, 10688: 0.785, 10689: 2.904, 10690: 3.142, 10691: 1.155, 10692: 0.503, 10693: 0.636, 10694: 1.571, 10695: 1.807, 10696: 2.659, 10697: 0.196, 10698: 0.327, 10699: 1.327, 10700: 1.815, 10701: 2.217, 10702: 0.283, 10703: 0.385, 10704: 1.005, 10705: 0.636, 10706: 1.571, 10707: 1.901, 10708: 1.131, 10709: 2.655, 10710: 1.517, 10711: 3.534, 10712: 1.215, 10713: 4.41, 10714: 2.895, 12763: 1.307, 12764: 1.287, 12765: 1.815, 12766: 2.011, 12767: 0.393, 12768: 1.287, 12769: 2.217, 12770: 2.433, 12771: 0.417, 12772: 0.287, 12773: 1.144, 12774: 0.95, 12775: 1.131, 12776: 2.655, 12777: 2.574, 12778: 1.453, 12779: 1.629, 12780: 4.021, 12781: 0.196, 12782: 1.453, 12752: 1.327}, 'TIGE_HA': {12809: 25.0, 12810: 25.0, 12811: 16.0, 12812: 16.0, 12813: 16.0, 12814: 16.0, 12815: 16.0, 12816: 25.0, 12817: 25.0, 12753: 25.0, 12819: 50.0, 12820: 25.0, 12821: 25.0, 12822: 25.0, 12823: 25.0, 12824: 16.0, 10779: 25.0, 10780: 16.0, 10781: 16.0, 10782: 16.0, 10783: 16.0, 10784: 25.0, 10785: 50.0, 10786: 25.0, 10787: 50.0, 10788: 25.0, 10789: 16.0, 10790: 25.0, 10791: 25.0, 10792: 25.0, 10793: 16.0, 10794: 25.0, 10795: 25.0, 10796: 25.0, 10797: 25.0, 10798: 25.0, 12754: 25.0, 12638: 25.0, 12639: 16.0, 12640: 100.0, 12641: 25.0, 12642: 25.0, 12755: 50.0, 12643: 25.0, 13028: 25.0, 12644: 25.0, 12645: 75.0, 12646: 50.0, 12647: 25.0, 12818: 25.0, 12733: 50.0, 12648: 50.0, 13029: 16.0, 12734: 25.0, 12649: 50.0, 12735: 16.0, 12736: 25.0, 12737: 50.0, 12738: 25.0, 13030: 25.0, 13013: 25.0, 12739: 25.0, 12740: 50.0, 11419: 25.0, 11420: 16.0, 11421: 16.0, 11422: 25.0, 11423: 50.0, 11424: 50.0, 11425: 50.0, 11426: 25.0, 11427: 50.0, 11428: 50.0, 11429: 25.0, 11430: 50.0, 11431: 32.0, 11432: 16.0, 11433: 16.0, 12741: 16.0, 12743: 25.0, 13031: 25.0, 12744: 25.0, 12745: 25.0, 12746: 25.0, 12747: 25.0, 12742: 25.0, 12748: 25.0, 12749: 16.0, 12750: 25.0, 13014: 25.0, 13015: 25.0, 13016: 25.0, 13017: 25.0, 13018: 25.0, 12751: 25.0, 13020: 16.0, 13021: 25.0, 13022: 50.0, 11999: 25.0, 12000: 75.0, 12001: 50.0, 12002: 50.0, 12003: 25.0, 12004: 16.0, 12005: 25.0, 12006: 25.0, 12007: 25.0, 12008: 25.0, 12009: 25.0, 12010: 25.0, 12011: 25.0, 12012: 25.0, 12013: 25.0, 12014: 50.0, 12015: 50.0, 12016: 25.0, 12017: 16.0, 12018: 16.0, 12019: 25.0, 12020: 75.0, 12021: 25.0, 12022: 25.0, 12023: 25.0, 12024: 16.0, 12756: 25.0, 12757: 25.0, 12758: 75.0, 12759: 16.0, 12760: 16.0, 12761: 25.0, 12762: 25.0, 13019: 25.0, 13023: 25.0, 13024: 25.0, 13025: 25.0, 13026: 50.0, 13027: 25.0, 12630: 100.0, 12631: 50.0, 12632: 25.0, 12633: 25.0, 12634: 16.0, 12635: 16.0, 12636: 50.0, 12637: 75.0, 11102: 25.0, 11103: 25.0, 11104: 25.0, 11105: 25.0, 11106: 50.0, 11107: 25.0, 11108: 25.0, 11109: 25.0, 11110: 16.0, 11111: 48.0, 11112: 25.0, 11113: 25.0, 11114: 50.0, 11115: 25.0, 11116: 16.0, 12728: 100.0, 12729: 25.0, 12730: 50.0, 12731: 100.0, 12732: 50.0, 10685: 50.0, 10686: 25.0, 10687: 75.0, 10688: 25.0, 10689: 75.0, 10690: 16.0, 10691: 75.0, 10692: 25.0, 10693: 25.0, 10694: 50.0, 10695: 50.0, 10696: 16.0, 10697: 25.0, 10698: 25.0, 10699: 25.0, 10700: 16.0, 10701: 16.0, 10702: 25.0, 10703: 25.0, 10704: 50.0, 10705: 25.0, 10706: 50.0, 10707: 50.0, 10708: 25.0, 10709: 50.0, 10710: 25.0, 10711: 50.0, 10712: 16.0, 10713: 48.0, 10714: 16.0, 12763: 25.0, 12764: 16.0, 12765: 16.0, 12766: 16.0, 12767: 50.0, 12768: 16.0, 12769: 16.0, 12770: 16.0, 12771: 50.0, 12772: 25.0, 12773: 75.0, 12774: 25.0, 12775: 25.0, 12776: 50.0, 12777: 32.0, 12778: 16.0, 12779: 16.0, 12780: 32.0, 12781: 25.0, 12782: 16.0, 12752: 25.0}, 'ESSENCE': {12809: u'BOJ', 12810: u'BOJ', 12811: u'BOJ', 12812: u'BOJ', 12813: u'BOJ', 12814: u'BOJ', 12815: u'BOJ', 12816: u'EPR', 12817: u'ERR', 12753: u'ERR', 12819: u'ERS', 12820: u'ERS', 12821: u'ERS', 12822: u'ERS', 12823: u'ERS', 12824: u'ERS', 10779: u'BOJ', 10780: u'BOJ', 10781: u'BOJ', 10782: u'ERR', 10783: u'ERR', 10784: u'ERS', 10785: u'ERS', 10786: u'ERS', 10787: u'ERS', 10788: u'ERS', 10789: u'PET', 10790: u'BOJ', 10791: u'BOJ', 10792: u'BOJ', 10793: u'EPB', 10794: u'ERR', 10795: u'ERS', 10796: u'ERS', 10797: u'ERS', 10798: u'ERS', 12754: u'ERS', 12638: u'ERR', 12639: u'ERR', 12640: u'ERS', 12641: u'ERS', 12642: u'ERS', 12755: u'ERS', 12643: u'ERS', 13028: u'ERS', 12644: u'ERS', 12645: u'SAB', 12646: u'SAB', 12647: u'SAB', 12818: u'ERR', 12733: u'BOJ', 12648: u'SAB', 13029: u'ERS', 12734: u'BOJ', 12649: u'SAB', 12735: u'BOJ', 12736: u'EPR', 12737: u'ERS', 12738: u'ERS', 13030: u'HEG', 13013: u'BOJ', 12739: u'ERS', 12740: u'ERS', 11419: u'BOJ', 11420: u'BOJ', 11421: u'BOJ', 11422: u'ERS', 11423: u'ERS', 11424: u'ERS', 11425: u'ERS', 11426: u'ERS', 11427: u'ERS', 11428: u'ERS', 11429: u'ERS', 11430: u'ERS', 11431: u'ERS', 11432: u'ERS', 11433: u'ERS', 12741: u'ERS', 12743: u'HEG', 13031: u'SAB', 12744: u'BOJ', 12745: u'BOJ', 12746: u'BOJ', 12747: u'BOJ', 12742: u'HEG', 12748: u'BOJ', 12749: u'BOJ', 12750: u'ERR', 13014: u'BOJ', 13015: u'BOJ', 13016: u'BOJ', 13017: u'BOJ', 13018: u'BOJ', 12751: u'ERR', 13020: u'BOJ', 13021: u'EPB', 13022: u'ERS', 11999: u'BOJ', 12000: u'BOJ', 12001: u'BOJ', 12002: u'BOJ', 12003: u'BOJ', 12004: u'BOJ', 12005: u'EPR', 12006: u'EPR', 12007: u'ERR', 12008: u'ERR', 12009: u'ERR', 12010: u'ERR', 12011: u'ERR', 12012: u'ERS', 12013: u'ERS', 12014: u'ERS', 12015: u'ERS', 12016: u'ERS', 12017: u'ERS', 12018: u'ERS', 12019: u'PET', 12020: u'SAB', 12021: u'SAB', 12022: u'SAB', 12023: u'SAB', 12024: u'SAB', 12756: u'ERS', 12757: u'ERS', 12758: u'ERS', 12759: u'ERS', 12760: u'ERS', 12761: u'HEG', 12762: u'HEG', 13019: u'BOJ', 13023: u'ERS', 13024: u'ERS', 13025: u'ERS', 13026: u'ERS', 13027: u'ERS', 12630: u'BOJ', 12631: u'BOJ', 12632: u'BOJ', 12633: u'BOJ', 12634: u'BOJ', 12635: u'EPR', 12636: u'ERR', 12637: u'ERR', 11102: u'BOJ', 11103: u'BOJ', 11104: u'BOJ', 11105: u'BOJ', 11106: u'BOJ', 11107: u'BOJ', 11108: u'BOJ', 11109: u'BOJ', 11110: u'BOJ', 11111: u'BOJ', 11112: u'EPB', 11113: u'SAB', 11114: u'SAB', 11115: u'SAB', 11116: u'SAB', 12728: u'BOJ', 12729: u'BOJ', 12730: u'BOJ', 12731: u'BOJ', 12732: u'BOJ', 10685: u'BOJ', 10686: u'BOJ', 10687: u'BOJ', 10688: u'BOJ', 10689: u'BOJ', 10690: u'BOJ', 10691: u'ERS', 10692: u'ERS', 10693: u'ERS', 10694: u'ERS', 10695: u'ERS', 10696: u'ERS', 10697: u'BOJ', 10698: u'BOJ', 10699: u'BOJ', 10700: u'BOJ', 10701: u'BOJ', 10702: u'ERS', 10703: u'ERS', 10704: u'ERS', 10705: u'ERS', 10706: u'ERS', 10707: u'ERS', 10708: u'ERS', 10709: u'ERS', 10710: u'ERS', 10711: u'ERS', 10712: u'ERS', 10713: u'ERS', 10714: u'ERS', 12763: u'HEG', 12764: u'HEG', 12765: u'HEG', 12766: u'HEG', 12767: u'BOJ', 12768: u'BOJ', 12769: u'BOJ', 12770: u'ERR', 12771: u'ERS', 12772: u'ERS', 12773: u'ERS', 12774: u'ERS', 12775: u'ERS', 12776: u'ERS', 12777: u'ERS', 12778: u'ERS', 12779: u'ERS', 12780: u'ERS', 12781: u'SAB', 12782: u'SAB', 12752: u'ERR'}, 'CL_DHP': {12809: u'010', 12810: u'018', 12811: u'032', 12812: u'046', 12813: u'046', 12814: u'064', 12815: u'098', 12816: u'014', 12817: u'010', 12753: u'028', 12819: u'010', 12820: u'014', 12821: u'018', 12822: u'024', 12823: u'028', 12824: u'044', 10779: u'020', 10780: u'034', 10781: u'052', 10782: u'034', 10783: u'050', 10784: u'010', 10785: u'016', 10786: u'022', 10787: u'024', 10788: u'028', 10789: u'038', 10790: u'020', 10791: u'022', 10792: u'028', 10793: u'038', 10794: u'010', 10795: u'010', 10796: u'016', 10797: u'018', 10798: u'024', 12754: u'012', 12638: u'014', 12639: u'044', 12640: u'010', 12641: u'012', 12642: u'014', 12755: u'014', 12643: u'018', 13028: u'024', 12644: u'022', 12645: u'010', 12646: u'018', 12647: u'020', 12818: u'012', 12733: u'024', 12648: u'022', 13029: u'038', 12734: u'026', 12649: u'030', 12735: u'056', 12736: u'030', 12737: u'010', 12738: u'012', 13030: u'026', 13013: u'012', 12739: u'018', 12740: u'024', 11419: u'028', 11420: u'034', 11421: u'040', 11422: u'010', 11423: u'012', 11424: u'016', 11425: u'018', 11426: u'020', 11427: u'022', 11428: u'026', 11429: u'028', 11430: u'030', 11431: u'032', 11432: u'034', 11433: u'040', 12741: u'044', 12743: u'022', 13031: u'018', 12744: u'010', 12745: u'012', 12746: u'014', 12747: u'016', 12742: u'020', 12748: u'018', 12749: u'032', 12750: u'010', 13014: u'014', 13015: u'016', 13016: u'020', 13017: u'024', 13018: u'026', 12751: u'014', 13020: u'032', 13021: u'020', 13022: u'010', 11999: u'010', 12000: u'012', 12001: u'014', 12002: u'016', 12003: u'026', 12004: u'084', 12005: u'016', 12006: u'018', 12007: u'012', 12008: u'014', 12009: u'016', 12010: u'020', 12011: u'022', 12012: u'010', 12013: u'012', 12014: u'016', 12015: u'018', 12016: u'024', 12017: u'036', 12018: u'040', 12019: u'026', 12020: u'012', 12021: u'014', 12022: u'018', 12023: u'026', 12024: u'032', 12756: u'016', 12757: u'022', 12758: u'026', 12759: u'036', 12760: u'038', 12761: u'010', 12762: u'022', 13019: u'028', 13023: u'012', 13024: u'014', 13025: u'018', 13026: u'020', 13027: u'022', 12630: u'010', 12631: u'014', 12632: u'024', 12633: u'026', 12634: u'032', 12635: u'036', 12636: u'010', 12637: u'012', 11102: u'014', 11103: u'016', 11104: u'018', 11105: u'020', 11106: u'022', 11107: u'024', 11108: u'026', 11109: u'030', 11110: u'034', 11111: u'038', 11112: u'010', 11113: u'010', 11114: u'012', 11115: u'020', 11116: u'034', 12728: u'010', 12729: u'016', 12730: u'018', 12731: u'020', 12732: u'022', 10685: u'010', 10686: u'016', 10687: u'018', 10688: u'020', 10689: u'022', 10690: u'050', 10691: u'014', 10692: u'016', 10693: u'018', 10694: u'020', 10695: u'022', 10696: u'046', 10697: u'010', 10698: u'012', 10699: u'026', 10700: u'038', 10701: u'042', 10702: u'012', 10703: u'014', 10704: u'016', 10705: u'018', 10706: u'020', 10707: u'022', 10708: u'024', 10709: u'026', 10710: u'028', 10711: u'030', 10712: u'032', 10713: u'034', 10714: u'048', 12763: u'026', 12764: u'032', 12765: u'038', 12766: u'040', 12767: u'010', 12768: u'032', 12769: u'042', 12770: u'044', 12771: u'010', 12772: u'012', 12773: u'014', 12774: u'022', 12775: u'024', 12776: u'026', 12777: u'032', 12778: u'034', 12779: u'036', 12780: u'040', 12781: u'010', 12782: u'034', 12752: u'026'}, 'CL_QUAL': {12809: u'-', 12810: u'-', 12811: u'C', 12812: u'A', 12813: u'C', 12814: u'A', 12815: u'C', 12816: u'-', 12817: u'-', 12753: u'C', 12819: u'-', 12820: u'-', 12821: u'-', 12822: u'C', 12823: u'D', 12824: u'A', 10779: u'-', 10780: u'B', 10781: u'A', 10782: u'B', 10783: u'B', 10784: u'-', 10785: u'-', 10786: u'-', 10787: u'C', 10788: u'C', 10789: u'B', 10790: u'-', 10791: u'-', 10792: u'C', 10793: u'-', 10794: u'-', 10795: u'-', 10796: u'-', 10797: u'-', 10798: u'C', 12754: u'-', 12638: u'-', 12639: u'D', 12640: u'-', 12641: u'-', 12642: u'-', 12755: u'-', 12643: u'-', 13028: u'C', 12644: u'-', 12645: u'-', 12646: u'-', 12647: u'-', 12818: u'-', 12733: u'C', 12648: u'-', 13029: u'C', 12734: u'C', 12649: u'-', 12735: u'A', 12736: u'-', 12737: u'-', 12738: u'-', 13030: u'D', 13013: u'-', 12739: u'-', 12740: u'C', 11419: u'C', 11420: u'C', 11421: u'C', 11422: u'-', 11423: u'-', 11424: u'-', 11425: u'-', 11426: u'-', 11427: u'-', 11428: u'C', 11429: u'C', 11430: u'C', 11431: u'C', 11432: u'C', 11433: u'A', 12741: u'C', 12743: u'-', 13031: u'-', 12744: u'-', 12745: u'-', 12746: u'-', 12747: u'-', 12742: u'-', 12748: u'-', 12749: u'C', 12750: u'-', 13014: u'-', 13015: u'-', 13016: u'-', 13017: u'C', 13018: u'C', 12751: u'-', 13020: u'C', 13021: u'-', 13022: u'-', 11999: u'-', 12000: u'-', 12001: u'-', 12002: u'-', 12003: u'C', 12004: u'D', 12005: u'-', 12006: u'-', 12007: u'-', 12008: u'-', 12009: u'-', 12010: u'-', 12011: u'-', 12012: u'-', 12013: u'-', 12014: u'-', 12015: u'-', 12016: u'C', 12017: u'B', 12018: u'C', 12019: u'C', 12020: u'-', 12021: u'-', 12022: u'-', 12023: u'-', 12024: u'-', 12756: u'-', 12757: u'-', 12758: u'C', 12759: u'B', 12760: u'C', 12761: u'-', 12762: u'-', 13019: u'C', 13023: u'-', 13024: u'-', 13025: u'-', 13026: u'-', 13027: u'-', 12630: u'-', 12631: u'-', 12632: u'D', 12633: u'C', 12634: u'C', 12635: u'-', 12636: u'-', 12637: u'-', 11102: u'-', 11103: u'-', 11104: u'-', 11105: u'-', 11106: u'-', 11107: u'C', 11108: u'C', 11109: u'C', 11110: u'D', 11111: u'B', 11112: u'-', 11113: u'-', 11114: u'-', 11115: u'-', 11116: u'-', 12728: u'-', 12729: u'-', 12730: u'-', 12731: u'-', 12732: u'-', 10685: u'-', 10686: u'-', 10687: u'-', 10688: u'-', 10689: u'-', 10690: u'A', 10691: u'-', 10692: u'-', 10693: u'-', 10694: u'-', 10695: u'-', 10696: u'B', 10697: u'-', 10698: u'-', 10699: u'C', 10700: u'C', 10701: u'D', 10702: u'-', 10703: u'-', 10704: u'-', 10705: u'-', 10706: u'-', 10707: u'-', 10708: u'C', 10709: u'C', 10710: u'C', 10711: u'C', 10712: u'C', 10713: u'B', 10714: u'A', 12763: u'D', 12764: u'D', 12765: u'B', 12766: u'C', 12767: u'-', 12768: u'C', 12769: u'A', 12770: u'C', 12771: u'-', 12772: u'-', 12773: u'-', 12774: u'-', 12775: u'C', 12776: u'C', 12777: u'C', 12778: u'C', 12779: u'B', 12780: u'B', 12781: u'-', 12782: u'-', 12752: u'C'}, 'VMB_HA': {12809: 0.519, 12810: 4.001, 12811: 10.43, 12812: 25.553, 12813: 25.346, 12814: 45.569, 12815: 107.649, 12816: 1.893, 12817: 0.508, 12753: 11.09, 12819: 1.024, 12820: 1.915, 12821: 3.972, 12822: 7.599, 12823: 11.886, 12824: 20.74, 10779: 5.782, 10780: 11.384, 10781: 28.337, 10782: 10.517, 10783: 23.658, 10784: 0.241, 10785: 4.821, 10786: 6.384, 10787: 16.194, 10788: 11.037, 10789: 17.916, 10790: 4.083, 10791: 5.96, 10792: 10.96, 10793: 14.481, 10794: 0.418, 10795: 0.344, 10796: 2.546, 10797: 3.514, 10798: 7.367, 12754: 1.071, 12638: 1.768, 12639: 18.545, 12640: 1.739, 12641: 1.049, 12642: 1.791, 12755: 3.658, 12643: 3.737, 13028: 7.711, 12644: 6.291, 12645: 1.551, 12646: 7.606, 12647: 5.046, 12818: 1.161, 12733: 16.333, 12648: 12.913, 13029: 14.075, 12734: 10.846, 12649: 27.35, 12735: 33.913, 12736: 14.306, 12737: 1.391, 12738: 1.075, 13030: 10.48, 13013: 1.097, 12739: 3.798, 12740: 15.853, 11419: 11.75, 11420: 11.693, 11421: 16.692, 11422: 0.482, 11423: 2.058, 11424: 5.52, 11425: 7.842, 11426: 5.228, 11427: 12.893, 11428: 19.371, 11429: 11.506, 11430: 27.01, 11431: 20.015, 11432: 11.393, 11433: 16.418, 12741: 20.064, 12743: 6.952, 13031: 2.711, 12744: 0.51, 12745: 1.129, 12746: 1.901, 12747: 2.831, 12742: 5.381, 12748: 3.922, 12749: 10.204, 12750: 0.473, 13014: 1.847, 13015: 3.049, 13016: 5.026, 13017: 7.919, 13018: 9.593, 12751: 1.581, 13020: 9.916, 13021: 3.595, 13022: 0.927, 11999: 0.523, 12000: 3.134, 12001: 3.9, 12002: 5.808, 12003: 9.374, 12004: 78.925, 12005: 2.814, 12006: 3.907, 12007: 1.096, 12008: 1.868, 12009: 2.773, 12010: 5.119, 12011: 6.468, 12012: 0.48, 12013: 1.393, 12014: 5.573, 12015: 7.693, 12016: 8.068, 12017: 13.297, 12018: 16.775, 12019: 12.22, 12020: 3.562, 12021: 1.286, 12022: 4.032, 12023: 10.362, 12024: 10.759, 12756: 2.738, 12757: 6.389, 12758: 29.326, 12759: 13.011, 12760: 14.582, 12761: 0.5, 12762: 6.957, 13019: 10.925, 13023: 1.046, 13024: 1.794, 13025: 3.684, 13026: 9.781, 13027: 6.227, 12630: 1.982, 12631: 2.817, 12632: 5.315, 12633: 8.709, 12634: 10.143, 12635: 13.743, 12636: 0.903, 12637: 2.962, 11102: 1.855, 11103: 2.764, 11104: 3.829, 11105: 5.051, 11106: 12.856, 11107: 7.96, 11108: 9.643, 11109: 13.454, 11110: 12.247, 11111: 46.763, 11112: 0.483, 11113: 0.801, 11114: 1.939, 11115: 4.875, 11116: 11.211, 12728: 2.45, 12729: 2.837, 12730: 9.12, 12731: 20.735, 12732: 13.193, 10685: 1.001, 10686: 2.777, 10687: 11.539, 10688: 5.073, 10689: 20.243, 10690: 26.256, 10691: 5.614, 10692: 2.687, 10693: 3.7, 10694: 9.875, 10695: 12.039, 10696: 21.442, 10697: 0.517, 10698: 1.796, 10699: 10.017, 10700: 15.148, 10701: 18.8, 10702: 1.1, 10703: 1.88, 10704: 5.586, 10705: 3.892, 10706: 10.231, 10707: 13.027, 10708: 8.084, 10709: 19.623, 10710: 11.013, 10711: 27.433, 10712: 10.003, 10713: 35.652, 10714: 24.685, 12763: 8.685, 12764: 11.497, 12765: 17.326, 12766: 19.529, 12767: 1.02, 12768: 10.211, 12769: 18.542, 12770: 18.931, 12771: 1.211, 12772: 1.197, 12773: 5.797, 12774: 6.427, 12775: 7.991, 12776: 19.282, 12777: 20.001, 12778: 11.453, 12779: 13.023, 12780: 32.788, 12781: 0.523, 12782: 11.756, 12752: 9.368}}
tiges = pd.DataFrame(_t)

То, что я пробовал

Я вижу несколько методов для достижения этого результата, все итерации по фреймам данных. Но у меня есть около 60 файлов, каждый из которых содержит от 20 000 до 30 000 геокодов (всего около 1 500 000 геокодов), поэтому я ищу самое быстрое выполнение (не переусердствуйте).

Это лучшее (и тем не менее, я чувствую, что это не самый оптимальный способ:

  • Перебор списка уникальных геокодов
  • Создание подкадра данных tiges с сохранением только выборок связанный с геокодом
  • Умножение значений на веса каждого образца
  • Использование groupby для создания необходимого вывода для одного геокода
  • Объединение всех данных геокодов в конце.

Вот код:

import pandas as pd
import numpy as np

# Import the data from sample and validation (too long to copy again)


geocodes = ['-158170,19+364636,34'] # geocode from the sampling data 

weights = weights.set_index(['GEOCODE', 'ID_PE'])
tiges = tiges.set_index(['ID_PE', 'ESSENCE', 'CL_DHP', 'CL_QUAL'])

# Duplicating the weights to easily multiply with pandas
_weights = weights
for col in ['VMB_HA', 'TIGE_HA', 'ST_HA']:
    _weights[col] = weights['POIDS_PE']
_weights = _weights.drop('POIDS_PE', axis=1)

times = []
for i in range(50):
    start = time()
    dfs = []
    for geocode in geocodes:
        ids_pe = _weights.loc[geocode].index.unique()  # sample plots used for this geocode
        temp_tiges = tiges[np.in1d(tiges.index.get_level_values(0), list(ids_pe))]  # Keeping only those samples
        temp_group = temp_tiges * _weights.loc[geocode]  # aaplying the weights
        _df = temp_group.reset_index().groupby(['ESSENCE', 'CL_DHP', 'CL_QUAL']).sum()
        _df['GEOCODE'] = geocode
        dfs.append(_df)
    df = pd.concat(dfs)
    desired_output = df.reset_index()
    times.append(round(time() - start, 6))
print(np.mean(times))

Используя данные выборки, я получил среднее время выполнения 0,01378 сек c. Используя мои полные данные с одним и тем же геокодом, среднее время выполнения составляет 0,03376 секунды.

Я много раз слышал, что перебор DataFrame - не лучший способ сделать подобные вещи. Что может быть правильным и быстрым способом?

Я также боюсь, что линия df = pd.concat(dfs) может занять много времени с 20 000 геокодов.

Примечание: я застрял с python 2.7 и pandas 0.16.1, потому что я работаю с базами геоданных в ArcMap 10.4.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...