Сортировочный стол для проволокиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сортировочный стол для проволоки

Сообщение Anonymous »

У меня есть поле csv с 4 столбцами.
Теперь я хочу отсортировать строки со значениями из столбцов 2 и 3.
Строки обозначают провод, а столбец 2 — это первая точка подключения. столбец 3 — вторая точка подключения.
Теперь я хочу найти в данных CSV проводные мосты и отсортировать эту таблицу, чтобы у меня были одинаковые проводные мосты между собой.
И сгруппировать эти провода вместе на месте группа число в столбце 5.
У меня есть следующий код:
Входной файл Csv:
1;-100F3:1;-100F4:1;test
2;-100F4:1;-100F10:2;test
3;-50F4:2;-100F10:2;test
4;-50F5:3;-50F4:3;test
5;-50F4:3;-30F4:3;test
6;-30F4:3;-200F10;test

Файл Python:

import pandas as pd
import re

# Functie om correct te sorteren
def natural_sort_key(s):
"""Sorteert een string correct op basis van cijfers en letters"""
return [int(text) if text.lstrip("-").isdigit() else text for text in re.split(r'(-?\d+)', s)]

# Laad het CSV-bestand (vervang 'bestand.csv' door jouw bestandsnaam)
bestand = "bestand.csv"
df = pd.read_csv(bestand)
df = pd.read_csv(bestand, delimiter=";", header=None, names=["ID", "Kolom_2", "Kolom_3", "Omschrijving"])
# Controleer of het bestand de juiste kolommen heeft

print(df.shape)
if df.shape[1] < 3:
raise ValueError("Het bestand moet minstens 3 kolommen bevatten.")

# Geef kolommen standaardnamen als ze geen headers hebben
df.columns = [f"Kolom_{i+1}" for i in range(df.shape[1])]

# Zorg ervoor dat binnen elke rij Kolom_2 altijd een lagere alfabetische waarde heeft dan Kolom_3
df[['Kolom_2', 'Kolom_3']] = df[['Kolom_2', 'Kolom_3']].apply(lambda x: sorted(x), axis=1, result_type='expand')

# Groeperen op basis van overeenkomsten in Kolom_2 en Kolom_3
df_sorted = df.sort_values(by=["Kolom_2", "Kolom_3"])

# Toon het gegroepeerde resultaat
print(df) # Toon de DataFrame in de terminal
df.to_csv("output.csv", index=False) # Opslaan in een CSV-bestand
print("Data opgeslagen in output.csv")

# Groeperen op basis van gedeelde waarden in Kolom_2 en Kolom_3
group_dict = {}
group_counter = 1

# Itereer door de rijen om groepen toe te wijzen
for index, row in df.iterrows():
found_group = None
for key, values in group_dict.items():
if row["Kolom_2"] in values or row["Kolom_3"] in values:
found_group = key
break

if found_group:
group_dict[found_group].update([row["Kolom_2"], row["Kolom_3"]])
df.at[index, "Kolom_5"] = found_group
else:
group_dict[group_counter] = {row["Kolom_2"], row["Kolom_3"]}
df.at[index, "Kolom_5"] = group_counter
group_counter += 1

# Zorg ervoor dat gerelateerde rijen dezelfde groepsnummer krijgen
for key, values in group_dict.items():
df.loc[df["Kolom_2"].isin(values) | df["Kolom_3"].isin(values), "Kolom_5"] = key

print(df)

Выход:
Data opgeslagen in output.csv
Kolom_1 Kolom_2 Kolom_3 Kolom_4 Kolom_5
0 1 -100F3:1 -100F4:1 test 1.0
1 2 -100F10:2 -100F4:1 test 1.0
2 3 -100F10:2 -50F4:2 test 1.0
3 4 -50F4:3 -50F5:3 test 2.0
4 5 -30F4:3 -50F4:3 test 2.0
5 6 -200F10 -30F4:3 test 2.0

Но сортировка неправильная.
Я хочу, чтобы значения были одинаковыми, если они нужны друг другу.
Кроме того, если значения не находятся в одном столбце, скрипту понадобится чтобы переключить значение из столбца 2 в столбец 3 другим способом.
Мне нужен следующий вывод:
Data opgeslagen in output.csv
Kolom_1 Kolom_2 Kolom_3 Kolom_4 Kolom_5
0 1 -100F3:1 -100F4:1 test 1.0
1 2 -100F10:2 -100F4:1 test 1.0
2 3 -100F10:2 -50F4:2 test 1.0
3 4 -50F4:3 -50F5:3 test 2.0
4 5 -50F4:3 -30F4:3 test 2.0
5 6 -200F10 -30F4:3 test 2.0

Я создал собственную функцию сортировки, но это ничего не меняет.
# Functie om numeriek en alfabetisch correct te sorteren
def natural_sort_key(s):
if isinstance(s, str): # Alleen strings sorteren
return [int(text) if text.lstrip("-").isdigit() else text for text in re.split(r'(-?\d+)', s)]
return s # Retourneer numerieke waarden zoals ze zijn


Подробнее здесь: https://stackoverflow.com/questions/793 ... wire-table
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заблокировать стол ... делать вещи ... разблокировать стол с пружинными ботинками?
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Java, сортировочный анализ. Heapsort, QuickSort 1, QuickSort, Mergesort, с учетом черного ящика
    Anonymous » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Unity3d C# Physics.Overlapsphere не сортирует слои, даже если я определяю сортировочный слой
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Unity3d C# Physics.Overlapsphere не сортирует слои, даже если я определяю сортировочный слой
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Измерение угла кривой проволоки с помощью OpenCV
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»