У меня есть поле 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
Сортировочный стол для проволоки ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как заблокировать стол ... делать вещи ... разблокировать стол с пружинными ботинками?
Anonymous » » в форуме JAVA - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Unity3d C# Physics.Overlapsphere не сортирует слои, даже если я определяю сортировочный слой
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Unity3d C# Physics.Overlapsphere не сортирует слои, даже если я определяю сортировочный слой
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-