Files
GIS/OOPT/PivotTable.ipynb
T

87 KiB
Raw Blame History

In [16]:
import pandas as pd
import numpy as np
In [17]:
df = pd.read_excel('table_landcover.xls')
df.head(10)
Out[17]:
<style scoped=""> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style>
Name Code Count Area
0 Байрачные Дубравы 0 84 5.2500
1 Байрачные Дубравы 30 35 2.1875
2 Байрачные Дубравы 40 166 10.3750
3 Байрачные Дубравы 80 12 0.7500
4 Байрачные Дубравы 90 53 3.3125
5 Байрачные Дубравы 111 8 0.5000
6 Байрачные Дубравы 114 936 58.5000
7 Байрачные Дубравы 115 1070 66.8750
8 Байрачные Дубравы 116 65 4.0625
9 Байрачные Дубравы 121 3 0.1875
In [18]:
df.dtypes
Out[18]:
Name      object
Code       int64
Count      int64
Area     float64
dtype: object
In [19]:
df_pivot = pd.pivot_table(df,
               index=["Name"],
               values=["Area"],
               columns=["Code"]
               )
df_pivot
Out[19]:
<style scoped=""> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead tr th { text-align: left; } .dataframe thead tr:last-of-type th { text-align: right; } </style>
Area
Code 0 20 30 40 50 60 80 90 111 114 115 116 121 124 125 126
Name
Байрачные Дубравы 5.2500 NaN 2.1875 10.3750 NaN NaN 0.7500 3.3125 0.5000 58.5000 66.8750 4.0625 0.1875 NaN 9.6250 19.8125
Балка_Красногоровка NaN NaN 7.6250 12.8750 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Балка_Натухаевская NaN 2.8750 4.8750 1.8750 0.6250 NaN NaN NaN NaN 0.8125 NaN 0.1250 NaN 0.6250 4.0000 3.0625
Балки_горы_Педенкова 38.5625 NaN 62.1250 17.0625 NaN 0.3125 10.6250 10.5625 NaN NaN NaN NaN NaN NaN NaN 6.3125
Бужорский_лес NaN 0.2500 1.0000 4.1250 1.3125 NaN NaN NaN NaN 157.6875 1.6875 0.7500 NaN 2.6875 12.6875 13.0625
Высокогорный_массив_Ачишхо NaN NaN 1026.0625 NaN NaN 0.7500 NaN NaN 7.5000 25.3750 NaN 19.8750 NaN 5.1875 NaN 2.5625
Герпегем_обрезанная NaN NaN 626.8750 NaN NaN NaN NaN NaN NaN 509.0000 NaN 64.8750 NaN 0.7500 NaN 11.8750
Гора_Паршивая NaN NaN 206.9375 123.0000 NaN NaN NaN 23.5000 NaN 29.0000 2.1875 25.2500 NaN NaN 0.7500 60.2500
Гора_Школьная NaN NaN NaN 1.2500 2.3750 NaN NaN NaN NaN 236.6875 3.8750 12.9375 NaN NaN 5.1875 3.5000
Горный_узел_Большое_Псеушх NaN NaN 4.3125 NaN NaN NaN NaN NaN NaN 1535.3125 2.0625 4.2500 NaN NaN NaN NaN
Дефановское_насаждение_пихты NaN NaN NaN NaN NaN NaN NaN NaN NaN 1287.3750 NaN NaN NaN NaN NaN NaN
Долина_реки_Курджипс 7.1250 NaN 93.0625 NaN 0.3125 NaN NaN NaN 330.9375 716.5000 382.0625 17.4375 NaN NaN 0.7500 NaN
Каменные_грибы NaN NaN NaN NaN NaN NaN NaN NaN NaN 26.2500 NaN NaN NaN NaN NaN NaN
Коренной_берег_Кубани 7.3125 NaN 8.9375 8.6250 NaN NaN 9.4375 4.9375 NaN 6.0000 25.3750 3.3750 NaN NaN 10.6250 23.6875
Круглик 30.5625 NaN 750.8750 5.0625 NaN NaN NaN 3.3125 NaN 1725.5000 1.0000 89.8750 NaN 3.8750 3.5000 102.6250
Кудепстинский_лесопарк NaN NaN NaN NaN 0.0625 NaN NaN NaN NaN 28.5625 1.3125 0.6250 NaN NaN NaN NaN
Кустарниковый_участок_М_Зеленчук NaN NaN 1.3125 20.8750 NaN NaN 0.6250 10.5625 NaN 9.6250 8.6250 11.0625 NaN NaN 21.3125 30.4375
Новокубанский 6.0625 NaN 45.0000 160.6875 2.4375 NaN 7.2500 110.8125 NaN 1841.1875 443.0000 60.1875 NaN 3.5625 128.3125 266.7500
Предгорный_природны_лесной_комплекс NaN 0.6875 13.1875 65.5625 NaN NaN NaN 56.5000 NaN 1936.2500 108.0625 39.3125 NaN 12.7500 42.9375 33.2500
Расширение_заказника_Степн NaN NaN 1897.6250 990.6875 NaN NaN NaN NaN NaN NaN 0.8750 1.5000 NaN NaN 1.5625 4.3125
Урочище_Алексеевское NaN NaN 4.0000 10.3750 NaN NaN NaN 0.0625 NaN NaN NaN NaN NaN NaN NaN NaN
Урочище_Новомихайловское NaN NaN 6.8750 31.6250 NaN NaN NaN 8.6875 NaN NaN 3.4375 0.7500 NaN NaN 9.0625 3.8125
Урочище_Шевченко NaN NaN 19.5625 23.9375 NaN NaN NaN 10.8125 NaN NaN NaN 0.5000 NaN NaN 6.6250 9.0000
Хребет_Грузинка NaN NaN 0.9375 19.7500 NaN NaN NaN 1.0000 NaN 1536.5000 1.6875 12.5625 NaN 6.8750 13.8125 10.5000
Хребет_Туапхат NaN 1.6875 4.5000 NaN 8.1875 0.7500 0.3125 0.3750 170.6875 1162.7500 470.2500 2.7500 NaN 18.5000 41.3125 32.8750
Хребет_Экепце_Гадык 16.5625 NaN 295.6875 4.5000 NaN NaN NaN NaN NaN 568.5000 8.2500 47.2500 NaN 6.9375 17.5625 60.6250
Целинные степи_кургана_Бли NaN NaN 322.0625 13.4375 NaN NaN NaN 2.5000 NaN NaN NaN NaN NaN NaN NaN NaN
Шкуринские_балки NaN NaN 5.8125 6.0000 NaN NaN NaN 0.0625 NaN NaN NaN NaN NaN NaN NaN 0.6875
Южно_Таманский_берег 17.6250 NaN 169.5000 1.1250 NaN NaN 8.9375 0.7500 NaN NaN NaN NaN NaN NaN NaN NaN
In [20]:
# Добавляем необходимые столбцы
df_pivot['Sum_Area'] = df_pivot.sum(axis=1)
In [21]:
df_pivot.to_excel('table_landcover_pivot111.xls')
C:\Users\Evgenii\AppData\Local\Temp\ipykernel_11212\512436048.py:1: FutureWarning: As the xlwt package is no longer maintained, the xlwt engine will be removed in a future version of pandas. This is the only engine in pandas that supports writing in the xls format. Install openpyxl and write to an xlsx file instead. You can set the option io.excel.xls.writer to 'xlwt' to silence this warning. While this option is deprecated and will also raise a warning, it can be globally set and the warning suppressed.
  df_pivot.to_excel('table_landcover_pivot111.xls')

Добавляем столбцы с процентами

In [43]:
import pandas as pd
import numpy as np
In [44]:
# Предварительно удалить лишние столбцы
df = pd.read_excel('table_landcover_pivot.xls')
df.head(10)
Out[44]:
<style scoped=""> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style>
Name 0 20 30 40 50 60 80 90 111 114 115 116 121 124 125 126 Sum_Area
0 Байрачные Дубравы 5.2500 NaN 2.1875 10.3750 NaN NaN 0.750 3.3125 0.5 58.5000 66.8750 4.0625 0.1875 NaN 9.6250 19.8125 181.4375
1 Балка_Красногоровка NaN NaN 7.6250 12.8750 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 20.5000
2 Балка_Натухаевская NaN 2.875 4.8750 1.8750 0.6250 NaN NaN NaN NaN 0.8125 NaN 0.1250 NaN 0.6250 4.0000 3.0625 18.8750
3 Балки_горы_Педенкова 38.5625 NaN 62.1250 17.0625 NaN 0.3125 10.625 10.5625 NaN NaN NaN NaN NaN NaN NaN 6.3125 145.5625
4 Бужорский_лес NaN 0.250 1.0000 4.1250 1.3125 NaN NaN NaN NaN 157.6875 1.6875 0.7500 NaN 2.6875 12.6875 13.0625 195.2500
5 Высокогорный_массив_Ачишхо NaN NaN 1026.0625 NaN NaN 0.7500 NaN NaN 7.5 25.3750 NaN 19.8750 NaN 5.1875 NaN 2.5625 1087.3125
6 Герпегем_обрезанная NaN NaN 626.8750 NaN NaN NaN NaN NaN NaN 509.0000 NaN 64.8750 NaN 0.7500 NaN 11.8750 1213.3750
7 Гора_Паршивая NaN NaN 206.9375 123.0000 NaN NaN NaN 23.5000 NaN 29.0000 2.1875 25.2500 NaN NaN 0.7500 60.2500 470.8750
8 Гора_Школьная NaN NaN NaN 1.2500 2.3750 NaN NaN NaN NaN 236.6875 3.8750 12.9375 NaN NaN 5.1875 3.5000 265.8125
9 Горный_узел_Большое_Псеушх NaN NaN 4.3125 NaN NaN NaN NaN NaN NaN 1535.3125 2.0625 4.2500 NaN NaN NaN NaN 1545.9375
In [45]:
col_list = df.columns
for col in col_list:
    if col not in ('Name', 'Sum_Area'):
        df[str(col) + '_%'] = df[col] / df['Sum_Area'] * 100
    else:
        pass
#df = df.reindex(sorted(df.columns), axis=1)
df
Out[45]:
<style scoped=""> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style>
Name 0 20 30 40 50 60 80 90 111 ... 80_% 90_% 111_% 114_% 115_% 116_% 121_% 124_% 125_% 126_%
0 Байрачные Дубравы 5.2500 NaN 2.1875 10.3750 NaN NaN 0.7500 3.3125 0.5000 ... 0.413365 1.825698 0.275577 32.242508 36.858422 2.239063 0.103341 NaN 5.304857 10.919738
1 Балка_Красногоровка NaN NaN 7.6250 12.8750 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 Балка_Натухаевская NaN 2.8750 4.8750 1.8750 0.6250 NaN NaN NaN NaN ... NaN NaN NaN 4.304636 NaN 0.662252 NaN 3.311258 21.192053 16.225166
3 Балки_горы_Педенкова 38.5625 NaN 62.1250 17.0625 NaN 0.3125 10.6250 10.5625 NaN ... 7.299270 7.256333 NaN NaN NaN NaN NaN NaN NaN 4.336625
4 Бужорский_лес NaN 0.2500 1.0000 4.1250 1.3125 NaN NaN NaN NaN ... NaN NaN NaN 80.761844 0.864277 0.384123 NaN 1.376440 6.498079 6.690141
5 Высокогорный_массив_Ачишхо NaN NaN 1026.0625 NaN NaN 0.7500 NaN NaN 7.5000 ... NaN NaN 0.689774 2.333736 NaN 1.827901 NaN 0.477094 NaN 0.235673
6 Герпегем_обрезанная NaN NaN 626.8750 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN 41.949109 NaN 5.346657 NaN 0.061811 NaN 0.978675
7 Гора_Паршивая NaN NaN 206.9375 123.0000 NaN NaN NaN 23.5000 NaN ... NaN 4.990709 NaN 6.158747 0.464561 5.362357 NaN NaN 0.159278 12.795328
8 Гора_Школьная NaN NaN NaN 1.2500 2.3750 NaN NaN NaN NaN ... NaN NaN NaN 89.043028 1.457794 4.867153 NaN NaN 1.951564 1.316718
9 Горный_узел_Большое_Псеушх NaN NaN 4.3125 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN 99.312715 0.133414 0.274914 NaN NaN NaN NaN
10 Дефановское_насаждение_пихты NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN 100.000000 NaN NaN NaN NaN NaN NaN
11 Долина_реки_Курджипс 7.1250 NaN 93.0625 NaN 0.3125 NaN NaN NaN 330.9375 ... NaN NaN 21.375802 46.279924 24.678051 1.126317 NaN NaN 0.048444 NaN
12 Каменные_грибы NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN 100.000000 NaN NaN NaN NaN NaN NaN
13 Коренной_берег_Кубани 7.3125 NaN 8.9375 8.6250 NaN NaN 9.4375 4.9375 NaN ... 8.713214 4.558569 NaN 5.539527 23.427582 3.115984 NaN NaN 9.809579 21.869590
14 Круглик 30.5625 NaN 750.8750 5.0625 NaN NaN NaN 3.3125 NaN ... NaN 0.121954 NaN 63.526542 0.036816 3.308866 NaN 0.142663 0.128857 3.778274
15 Кудепстинский_лесопарк NaN NaN NaN NaN 0.0625 NaN NaN NaN NaN ... NaN NaN NaN 93.456033 4.294479 2.044990 NaN NaN NaN NaN
16 Кустарниковый_участок_М_Зеленчук NaN NaN 1.3125 20.8750 NaN NaN 0.6250 10.5625 NaN ... 0.546150 9.229929 NaN 8.410705 7.536865 9.666849 NaN NaN 18.623703 26.597488
17 Новокубанский 6.0625 NaN 45.0000 160.6875 2.4375 NaN 7.2500 110.8125 NaN ... 0.235753 3.603366 NaN 59.871149 14.405333 1.957158 NaN 0.115844 4.172425 8.674092
18 Предгорный_природны_лесной_комплекс NaN 0.6875 13.1875 65.5625 NaN NaN NaN 56.5000 NaN ... NaN 2.447477 NaN 83.874810 4.681070 1.702946 NaN 0.552307 1.859974 1.440329
19 Расширение_заказника_Степн NaN NaN 1897.6250 990.6875 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN 0.030208 0.051786 NaN NaN 0.053943 0.148883
20 Урочище_Алексеевское NaN NaN 4.0000 10.3750 NaN NaN NaN 0.0625 NaN ... NaN 0.432900 NaN NaN NaN NaN NaN NaN NaN NaN
21 Урочище_Новомихайловское NaN NaN 6.8750 31.6250 NaN NaN NaN 8.6875 NaN ... NaN 13.521401 NaN NaN 5.350195 1.167315 NaN NaN 14.105058 5.933852
22 Урочище_Шевченко NaN NaN 19.5625 23.9375 NaN NaN NaN 10.8125 NaN ... NaN 15.350488 NaN NaN NaN 0.709849 NaN NaN 9.405501 12.777285
23 Хребет_Грузинка NaN NaN 0.9375 19.7500 NaN NaN NaN 1.0000 NaN ... NaN 0.062359 NaN 95.814171 0.105230 0.783381 NaN 0.428716 0.861330 0.654767
24 Хребет_Туапхат NaN 1.6875 4.5000 NaN 8.1875 0.7500 0.3125 0.3750 170.6875 ... 0.016319 0.019583 8.913476 60.719997 24.556937 0.143608 NaN 0.966089 2.157381 1.716766
25 Хребет_Экепце_Гадык 16.5625 NaN 295.6875 4.5000 NaN NaN NaN NaN NaN ... NaN NaN NaN 55.416108 0.804192 4.605824 NaN 0.676252 1.711953 5.909589
26 Целинные степи_кургана_Бли NaN NaN 322.0625 13.4375 NaN NaN NaN 2.5000 NaN ... NaN 0.739645 NaN NaN NaN NaN NaN NaN NaN NaN
27 Шкуринские_балки NaN NaN 5.8125 6.0000 NaN NaN NaN 0.0625 NaN ... NaN 0.497512 NaN NaN NaN NaN NaN NaN NaN 5.472637
28 Южно_Таманский_берег 17.6250 NaN 169.5000 1.1250 NaN NaN 8.9375 0.7500 NaN ... 4.515314 0.378907 NaN NaN NaN NaN NaN NaN NaN NaN

29 rows × 34 columns

In [46]:
### Переводим названия всех колонок в str и сортируем по алфавиту
### df.columns = df.columns.astype(str)
### df = df.reindex(sorted(df.columns), axis=1)
### df
In [47]:
df.to_excel('table_landcover_pivot222.xls')
C:\Users\Evgenii\AppData\Local\Temp\ipykernel_11212\3617560819.py:1: FutureWarning: As the xlwt package is no longer maintained, the xlwt engine will be removed in a future version of pandas. This is the only engine in pandas that supports writing in the xls format. Install openpyxl and write to an xlsx file instead. You can set the option io.excel.xls.writer to 'xlwt' to silence this warning. While this option is deprecated and will also raise a warning, it can be globally set and the warning suppressed.
  df.to_excel('table_landcover_pivot222.xls')
In [ ]: