Jak usunąc wiersze z pliku csv, które spełniają dwa warunki: 1. Powtarza się komórka numerId. 2. Nie powatarza się komórka Target.

0

Jak usunąc wiersze z pliku csv, które spełniają dwa warunki: 1. Powtarza się komórka z numerem Id. 2. Nie powatarza się komórka Target.

Z góry dzięki.

0

Nie określiłeś się więc domniemam że nie musi być napisane skryptem.
Interfejsem użytkownika to będzie Danie -> Usuń duplikaty, zaznaczasz w których kolumnach ma je szukać (czyli id) i pach, nie ma skurczybyków

Druga część pytania - nigdy nie pisałem w pythonie ale chyba wystarczy pętla i zwykły if? Pętla, która leci po kolumnach i sprawdza czy cell.val("Target")-lub coś w tym stylu > 1? Jeśli tak to ją usuń
Tak mi to na logikę wyszło

0

Chyba źle mnie zrozumiałeś chodzi mi o napisanie w pythonie programu:
który usunie przypadki, gdzie( (powtarza sie numerId w kilku wierszach) && pole Target==0). Dwa warunki jednoczesnie.

patientId    x    y    w    h     Target
2341-vcb1    10   20   30   40      1
2341-vcb1    70   20   70   40      1
2341-vcb1                           0   <-delete it
1111-xcsc                           0
2341-v233    34   43   10   29      1
0

Załącznik z przykładem. Nazwy kolumn: numerId, x ,y, w, h ,Target

I teraz chce usunąc tylko te wiersze, gdzie powatarza się numerId w całym pliku oraz pole target musi miec 0 zeby je usunąć. Czyli muszą zajść dwa warunku jednoczesnie zwiazane z komorkami, zeby usunac caly wiersz.

0
patientId    x    y    w    h     Target
2341-vcb1    10   20   30   40      1
2341-vcb1    70   20   70   40      1
2341-vcb1                           0   <-delete it
1111-xcsc                           0
2341-v233    34   43   10   29      1
1
marysienka napisał(a):

Załącznik z przykładem. Nazwy kolumn: numerId, x ,y, w, h ,Target

I teraz chce usunąc tylko te wiersze, gdzie powatarza się numerId w całym pliku oraz pole target musi miec 0 zeby je usunąć. Czyli muszą zajść dwa warunku jednoczesnie zwiazane z komorkami, zeby usunac caly wiersz.

To najpierw przelec przez wszystkie komórki id i zapisz które id się powtarzają, a potem w warunku id == powtarzaneid and Target == 0

1
> awk '!x[$1]++||$NF' file
patientId    x    y    w    h     Target
2341-vcb1    10   20   30   40      1
2341-vcb1    70   20   70   40      1
1111-xcsc                           0
2341-v233    34   43   10   29      1
> 
0

Zakładając że chcesz je usunąć z pliku csv, ja bym zrobił to w następujący sposób:

1. Otworzył plik csv. 
1b. Utworzył plik tymczasowy.
2. Utworzył zbiór (`set`).
3. Wczytywał kolejne linie z pliku w pętli:
3a. Sprawdzał czy krotka [`tuple`] (ID, Target) występuje w słowniku.
3aa. Jeśli nie występuje, to zapisuje w pliku tymczasowym i dorzucam do zbioru.
4. Zamknął oba pliki.
5. Zastąpił stary plik nowym lub utworzył plik obok niego z jakimś dopiskiem np. plik.csv oraz plik_out.csv

Skoro numerId może się powtarzać, ale nie może się powtarzać target, to wyeliminuje ci wszystkie przypadki gdzie numerId będzie taki sam, oraz target będzie taki sam.
Zakładam możliwość że target dla różnych id może się powtarzać.

@Edit: trochę zamieszałeś tłumaczeniem, jeśli target ma się powtarzać dla danego ID. To wtedy polecam słownik, jako klucz ID, jako wartość Target. Wtedy sprawdzasz czy dla podanego ID jest odpowiedni target wczytanego rekordu, jeśli nie, to nie przepisujesz do nowego pliku.
Bo 'usunięcie' to nic innego jak nadpisanie nowym zmodyfikowanym plikiem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1