Метод подстановки

Автор Юлия1464611, 28 мая 2024, 01:00

0 Пользователи и 1 гость просматривают эту тему.

Юлия1464611

Как использовать подстановочные данные из другой связанной таблицы?

bbv62

Поддерживаю вопрос.
Имеется (постоянно пополняется) файл csv (proba.csv в примере) с данными (технологические характеристики деталей).
Необходимо этими данными заполнять поля (выделенные жёлтым в примере) в новых файлах (combined.csv в примере) при совпадении обозначения детали (столбец А в примере).
Нигде не могу найти даже зацепку на решение подобной задачи.
Пробовал зайти с Libre Base, но и там тёмный лес.

bigor

Цитата: bbv62 от  9 декабря 2024, 09:04выделенные жёлтым в примере
у вас в примере csv  и желтых полей там не рассмотреть
Поддержать наш форум можно здесь

bbv62

Извиняюсь, не сообразил.
В первой строке имена полей (те, что нужны).

bigor

Поддержать наш форум можно здесь

bbv62

Тогда так.
Формат значения не имеет.

bigor

Цитата: bbv62 от 10 декабря 2024, 06:10Тогда так.
теперь стало понятно :) Вижу 2 пути - формулами и макросом. Так как файлы combined постоянно новые, то каждый раз прописывать в них формулы не вариант, тогда макросом. Простейший вариант в циклах сравниваем столбцы А обеих файлов, если одинаковые дописываем строку файла combined из файла proba
Поддержать наш форум можно здесь

bbv62

Цитата: bigor от 10 декабря 2024, 08:36формулами и макросом
Только макросом!
Это файлики для примера. Вообще-то файлы от 1500 строк, и полей нужных втрое больше.
Забивать весь файл ВПР дико!
А вот с макросами у меня как-раз беда.
И ещё: Ссылки на другие книги, даже листы, сильно гуляют. Невозможно ни строку добавить/удалить, ни сортировку сделать. А хотелось бы (при возможности) иметь ссылку на ячейки базового файла, а не замороженный текст, на случай коррекций.
Искусственный мозг (ГоПоТа) оказался бессилен. Вся надежда на Вас (коллективный разум)!

bigor

Цитата: bbv62 от 10 декабря 2024, 11:57иметь ссылку на ячейки базового файла
о каких ссылках идет речь? если исходные файлы csv и получить мы , как я понял, тоже должны csv.
Поддержать наш форум можно здесь

bbv62

Цитата: bigor от 10 декабря 2024, 12:50тоже должны csv
Я этот файл (csv) сразу вставляю (копированием) в ods, привязанный к конкретной конструкции для последующей обработки.
Поэтому нужды сохранять его (csv) вообще нет. Вся обработка и архивирование в ods.
Просто исходный файл в этом формате формируется и обработать его проще (легче) одним листом в исходнике.
Опять-же, кто помешает применить этот макрос и в "полноценном" формате?

bbv62

Нашёл альтернативный способ решения задачи: Phyton-pandas.
Два варианта.
import pandas as pd
# Загрузка данных из файлов CSV
combined = pd.read_csv('combined.csv')
proba = pd.read_csv('proba.csv')
# Объединение двух DataFrame по значению в столбце obozn
merged = pd.merge(combined, proba, on='obozn', how='left', suffixes=('', '_proba'))
# Если нужно заменить значения в combined данными из proba
for column in proba.columns:
    if column != 'obozn':
        merged[column] = merged[column + '_proba'].combine_first(merged[column])
# Удаление временных колонок
merged = merged[combined.columns]
# Сохранение результата в новый файл
merged.to_csv('combined_updated.csv', index=False)
и import pandas as pd

# Загрузка данных из файлов CSV
print("Загрузка данных из combined.csv...")
combined = pd.read_csv('combined.csv')
print("Количество строк в combined:", len(combined))

print("Загрузка данных из proba.csv...")
proba = pd.read_csv('proba.csv')
print("Количество строк в proba:", len(proba))

# Объединение двух DataFrame по значению в столбце obozn
print("Объединение данных...")
merged = pd.merge(combined, proba, on='obozn', how='left', suffixes=('', '_proba'))
print("Количество строк после объединения:", len(merged))

# Заменяем значения в merged
print("Обработка столбцов...")
for column in proba.columns:
    if column != 'obozn':
        merged[column] = merged[column + '_proba'].fillna(merged[column])
        print(f"Обработан столбец: {column}")

# Удаление временных колонок
print("Удаление временных колонок...")
merged = merged[combined.columns]

# Сохранение результата в новый файл
print("Сохранение данных в combined_updated.csv...")
merged.to_csv('combined_updated.csv', index=False)
print("Данные успешно сохранены в combined_updated.csv")
В обоих вариантах файлы должны быть в одной директории, скрипт выполняться оттуда-же (или соответствующий файл *.py запускаться)
Меня более чем устраивает.