Работа с атрибутивными таблицами
-
- Участник
- Сообщения: 68
- Зарегистрирован: 30 авг 2014, 11:11
- Репутация: 0
Работа с атрибутивными таблицами
Здравствуйте, уважаемые пользователи!
Быть может создал тему, зря, но не судите строго (обратите внимание на стаж)
В общем проблема заключается в чем...
Имеется таблица с атрибутами, в которой две колонки. Первая содержит несколько повторяющихся значений (к примеру десять значений под номером 1 и десять значений под номером 2). Как автоматически присвоить порядковый номер для этих значений, но только во вторую колонку ?
На практике хочу чтоб получилось так...
1-1
1-2
1-3
1-4
...
2-1
2-2
2-3
2-4
...
Буду очень признателен за помощь.
Быть может создал тему, зря, но не судите строго (обратите внимание на стаж)
В общем проблема заключается в чем...
Имеется таблица с атрибутами, в которой две колонки. Первая содержит несколько повторяющихся значений (к примеру десять значений под номером 1 и десять значений под номером 2). Как автоматически присвоить порядковый номер для этих значений, но только во вторую колонку ?
На практике хочу чтоб получилось так...
1-1
1-2
1-3
1-4
...
2-1
2-2
2-3
2-4
...
Буду очень признателен за помощь.
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 16 дек 2012, 09:08
- Репутация: 48
- Откуда: Калининград
Re: Работа с атрибутивными таблицами
Здравствуйте. Посредством выражения на python, с помощью инструмента "калькулятор поля" ("field calculator...") Вы можете произвести необходимые расчеты
1. Создайте текстовое поле
2. Войдите в калькулятор поля для него
3. Выберите парсер Python
4. Используйте "%s-%s" % (!FID!, !Field!)
где FID - обычно поле с порядковым номером с нуля
Field - второе необходимое поле
"%s-%s" - здесь вы можете заменить "-" на любой другой знак
Если необходимо поле с порядковыми от "1", то вы, в первую очередь, можете создать новое поле, где посредством [FID] + 1 можете их рассчитать
1. Создайте текстовое поле
2. Войдите в калькулятор поля для него
3. Выберите парсер Python
4. Используйте "%s-%s" % (!FID!, !Field!)
где FID - обычно поле с порядковым номером с нуля
Field - второе необходимое поле
"%s-%s" - здесь вы можете заменить "-" на любой другой знак
Если необходимо поле с порядковыми от "1", то вы, в первую очередь, можете создать новое поле, где посредством [FID] + 1 можете их рассчитать
-
- Участник
- Сообщения: 68
- Зарегистрирован: 30 авг 2014, 11:11
- Репутация: 0
Re: Работа с атрибутивными таблицами
Извиняюсь за оценку, случайно оценил Ваш пост. То что Вы описали, полезная информация, но для требуемой задачи это не совсем то что нужно.
Вероятнее всего я не так изложил ситуацию. Для полной ясности прикладываю скриншот таблицы.
Ещё раз попытаюсь объяснить. Дело в том, что данные для колонки "№" взять негде, а в неё требуется внести порядковый номер, при этом для каждого из значений колонки "KV", он должен начинаться сначало...
В результате вот чего ожидаю...
KV №
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
Вероятнее всего я не так изложил ситуацию. Для полной ясности прикладываю скриншот таблицы.
Ещё раз попытаюсь объяснить. Дело в том, что данные для колонки "№" взять негде, а в неё требуется внести порядковый номер, при этом для каждого из значений колонки "KV", он должен начинаться сначало...
В результате вот чего ожидаю...
KV №
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
- Вложения
-
- Безымянный.jpg (114.02 КБ) 9202 просмотра
- nadiopt
- Гуру
- Сообщения: 4744
- Зарегистрирован: 29 янв 2009, 13:27
- Репутация: 495
- Ваше звание: хрюкало
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Работа с атрибутивными таблицами
знакомая ситуация
я делаю очень коряво. экспортирую в эксель. потом завожу колонку "да или нет", в ней логическое выражение "kv= [предыдущая строка]". Ну и в колонке номер - Если да, то номер равен предыдущей строке+1. если нет, то номер равен 1. вот как-то так. и подсоединяю назад по FID
я делаю очень коряво. экспортирую в эксель. потом завожу колонку "да или нет", в ней логическое выражение "kv= [предыдущая строка]". Ну и в колонке номер - Если да, то номер равен предыдущей строке+1. если нет, то номер равен 1. вот как-то так. и подсоединяю назад по FID
ин гроссен фамилен нихт клювен клац клац
-
- Гуру
- Сообщения: 1018
- Зарегистрирован: 01 авг 2012, 13:55
- Репутация: 241
-
- Участник
- Сообщения: 68
- Зарегистрирован: 30 авг 2014, 11:11
- Репутация: 0
Re: Работа с атрибутивными таблицами
А вы не могли бы отправить пример excel таблицы ?nadiopt писал(а):знакомая ситуация
я делаю очень коряво. экспортирую в эксель. потом завожу колонку "да или нет", в ней логическое выражение "kv= [предыдущая строка]". Ну и в колонке номер - Если да, то номер равен предыдущей строке+1. если нет, то номер равен 1. вот как-то так. и подсоединяю назад по FID
- nadiopt
- Гуру
- Сообщения: 4744
- Зарегистрирован: 29 янв 2009, 13:27
- Репутация: 495
- Ваше звание: хрюкало
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Работа с атрибутивными таблицами
простите ради Бога за корявость, не нашла правильно написанного кода (когда-то писала, но уже не помню). пока придумался такой костыль:
1) включаем в Эксель стиль формул R1C1 (как на картинке)
2) заводим первую строку "нулевой квартал", иначе не сработает
3) в следующей строке (1 квартал 1 выдел) прописываем в колонке "да или нет" формулу: =RC[-1]=R[-1]C[-1]
4) тянем до низу
5) фильтруем значения "ложь"
6) прописываем номер выдела = 1
7) фильтруем значения "истина"
прописываем в первой строке формулу =R[-1]+1
ну и присобачиваем обратно по FID
1) включаем в Эксель стиль формул R1C1 (как на картинке)
2) заводим первую строку "нулевой квартал", иначе не сработает
3) в следующей строке (1 квартал 1 выдел) прописываем в колонке "да или нет" формулу: =RC[-1]=R[-1]C[-1]
4) тянем до низу
5) фильтруем значения "ложь"
6) прописываем номер выдела = 1
7) фильтруем значения "истина"

ну и присобачиваем обратно по FID
- Вложения
-
- 2014-08-31 15-25-33 Скриншот экрана.png (80.73 КБ) 9122 просмотра
-
пример.rar
- (8.79 КБ) 234 скачивания
ин гроссен фамилен нихт клювен клац клац
-
- Участник
- Сообщения: 68
- Зарегистрирован: 30 авг 2014, 11:11
- Репутация: 0
Re: Работа с атрибутивными таблицами
Всех благодарю за совет!
Воспользовался методом от nadiopt
nadiopt Вам отдельное спасибо, за столь подробные разъяснения.
Воспользовался методом от nadiopt
nadiopt Вам отдельное спасибо, за столь подробные разъяснения.
-
- Активный участник
- Сообщения: 163
- Зарегистрирован: 28 июн 2012, 01:02
- Репутация: 84
- Откуда: Vladivostok
Re: Работа с атрибутивными таблицами
На мой взгляд lam указал более правильное направление для решения этой задачи. Предлагаю (опять таки на мой взгляд) более удобный скрипт на python для калькулятора поля чем тот, что приведен в справке:
Он сам учтет разные значения в поле, а еще ему не обязательно, что бы эти значения были сгруппированы и шли подряд.
Вызываем, если нужно начинать с 1 и с шагом 1, так:
Для иного начального значения и шага, например, начиная с 2 и с шагом 3, так:
P.S. Знаю, что предлагаю решение уже после того, как задача решена, но может кому-то в будущем оно пригодится.
Код: Выделить всё
def get_counter(field_value, start_from=1, interval=1, d={}):
start_from -= interval
counter = d.setdefault(field_value, start_from) + interval
d[field_value] = counter
return counter
Вызываем, если нужно начинать с 1 и с шагом 1, так:
Код: Выделить всё
get_counter( !Field1! )
Код: Выделить всё
get_counter( !Field1!, 2, 3 )
Последний раз редактировалось doujin 05 сен 2014, 07:36, всего редактировалось 1 раз.
-
- Участник
- Сообщения: 68
- Зарегистрирован: 30 авг 2014, 11:11
- Репутация: 0
Re: Работа с атрибутивными таблицами
Согласен, lam дал правильное направление, но к сожалению я так и не смог допонять как всё таки выполнить такую операцию. И на этот раз, по вашему предложению не смог использовать указанные выражения.
Вставляю указанные выражения в калькулятор и в ходе обработки возникает ошибка.
Для того чтобы выражение сработао вместо !Field1! подставлял !KV 1!, возможно в этом кроется ошибка ?
Код: Выделить всё
get_counter( !Field1! )
Код: Выделить всё
get_counter( !Field1!, 2, 3 )
Для того чтобы выражение сработао вместо !Field1! подставлял !KV 1!, возможно в этом кроется ошибка ?
-
- Активный участник
- Сообщения: 163
- Зарегистрирован: 28 июн 2012, 01:02
- Репутация: 84
- Откуда: Vladivostok
Re: Работа с атрибутивными таблицами
Без описания ошибки сложно сказать, что пошло не так.
Возможно, дело в кавычке, которая затесалась в мой код из предыдущего поста. Только сейчас обратил на это внимание и исправил. Досадная оплошность.
Либо вы как-то неправильно вызываете калькулятор.
показал, на что стоит обратить внимание, и куда вносить соответствующий код. Имя поля вы правильно вписали. Больше и не знаю, что предположить.
Возможно, дело в кавычке, которая затесалась в мой код из предыдущего поста. Только сейчас обратил на это внимание и исправил. Досадная оплошность.
Либо вы как-то неправильно вызываете калькулятор.
Спойлер

-
- Участник
- Сообщения: 68
- Зарегистрирован: 30 авг 2014, 11:11
- Репутация: 0
Re: Работа с атрибутивными таблицами
doujin, отличное решение, всё получилось как надо! В будущем сбережёт много времени и терпения 
спасибо

спасибо

Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 3 гостя