Сравнение значений в столбцах
- Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Сравнение значений в столбцах
Доброго времени суток!
Засыпался вот на такой задачке. Имеем таблицу атрибутов с двумя полями и значениями в них:
|_id_|_vid_|
|_2__|____|
|_3__|____|
|_5__|_2__|
|_10_|_19_|
|_13_|____|
|_19_|____|
|_21_|_2__|
В поле vid значения соответсвуют значениям в id. То есть vid "ссылается" на колонку id.
Нужно найти сторки, на которые есть "ссылка" и поставить в колонку result какой-либо идентификатор соответствия (пусть будет "1").
В итоге должно получится так:
|_id_|_vid_|_result_|
|_2__|____|___1___|
|_3__|____|_______|
|_5__|_2__|___1___|
|_10_|_19_|___1___|
|_13_|____|_______|
|_19_|____|___1___|
|_21_|_2__|___1___|
Пытался сделать на питоне. Но получалось, что он сравнивал только строки.
Как такое можно реализовать?
Засыпался вот на такой задачке. Имеем таблицу атрибутов с двумя полями и значениями в них:
|_id_|_vid_|
|_2__|____|
|_3__|____|
|_5__|_2__|
|_10_|_19_|
|_13_|____|
|_19_|____|
|_21_|_2__|
В поле vid значения соответсвуют значениям в id. То есть vid "ссылается" на колонку id.
Нужно найти сторки, на которые есть "ссылка" и поставить в колонку result какой-либо идентификатор соответствия (пусть будет "1").
В итоге должно получится так:
|_id_|_vid_|_result_|
|_2__|____|___1___|
|_3__|____|_______|
|_5__|_2__|___1___|
|_10_|_19_|___1___|
|_13_|____|_______|
|_19_|____|___1___|
|_21_|_2__|___1___|
Пытался сделать на питоне. Но получалось, что он сравнивал только строки.
Как такое можно реализовать?
Последний раз редактировалось Pavel 25 мар 2013, 16:12, всего редактировалось 1 раз.
Быстро, качественно, недорого - выбирайте любые два пункта...
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Сравнение значений в столбцах
На всякий случай вариант на <awk>:
Код: Выделить всё
awk '{if($2 is notnull) $3 = 1; print $1,$2,$3}' table.txt
Редактор материалов, модератор форума
- Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Re: Сравнение значений в столбцах
Да, только в таком случае, он ставит единички там, где vid<>0. А еще бы поставить единичку напротив id, на который ссылается vid. То есть, если vid = 19, то result для id = 10 и для id = 19 равно 1.
Быстро, качественно, недорого - выбирайте любые два пункта...
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Сравнение значений в столбцах
sql access
Код: Выделить всё
UPDATE test1 SET result=1
where Not (test1.vid=IsNull([test1]![vid]))
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: Сравнение значений в столбцах
Что-то типа того:
На выходе:
Правда, с "delimiter = ' '" (пробел) плохо работает на выходе, нужно ставить либо запятую (','), либо табуляцию ('\t').
Код: Выделить всё
import csv
list1 = []
list2 = []
list3 = []
with open('table.txt', 'rb') as f:
reader = csv.reader(f, delimiter = ' ')
for row in reader:
if row:
col1 = row[0]
col2 = row[-1]
list1.append(col1)
list2.append(col2)
else:
pass
common = [x for x in list1 if x in list2]
with open('table.txt', 'rb') as f:
reader = csv.reader(f, delimiter = ' ')
for rows in reader:
col3 = [1 for i in common if i in rows]
list3.append(' '.join(map(str,col3[:1])))
length = len(list1)
result = open('result.txt', 'wb')
output = csv.writer(result, delimiter = '\t')
for i in range(0,length):
row = list1, list2, list3
output.writerow(row)
result.close()
На выходе:
Код: Выделить всё
2 1
3
5 2 1
10 19 1
13
19 1
21 2 1
Редактор материалов, модератор форума
- Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Re: Сравнение значений в столбцах
Хоршее решение. Даже очень хорошее!
Пытался все это дело провернуть в Pyculator, но он все-равно упорно сравнивает по строкам... Может я чего-то не допонимаю... Или все-таки структуры массивов отличаются от того, берем ли обычный файл или таблицу атрибутов?
Чтобы не быть голословным, что пытался сделать:
Хотя, я так подозреваю, что можно обойтись и без первых трех строк, просто записать их как
В общем, что-то я в конец запутался...
Пытался все это дело провернуть в Pyculator, но он все-равно упорно сравнивает по строкам... Может я чего-то не допонимаю... Или все-таки структуры массивов отличаются от того, берем ли обычный файл или таблицу атрибутов?
Чтобы не быть голословным, что пытался сделать:
Код: Выделить всё
list3 = []
row = [[ <id> ], [<vid>]]
col1 = row[0]
col2 = row[-1]
a = [x for x in col1 if x in col2]
col3 = [1 for i in a if i in row]
list3.append(' '.join(map(str,col3[:1])))
value = list3
Код: Выделить всё
col1 = [id]
col2 = [vid]
Быстро, качественно, недорого - выбирайте любые два пункта...
Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 3 гостя