wyciąganie kolumn pod danymi warunkami z pliku txt

0

czesc,
mam plik tekstowy z kilkoma kolumnami, interesują mnie tylko dwie pierwsze.
Potrzebuje stworzyć kilka plików z tego jednego pod głównym warunkiem, który potem zastosuje dla różnych kolumn:
-pokazuje wszystkie wiersze dla których wiersze w kolumnie X są większe od 0

Dzięki za pomoc, pozdrawiam

1

with open("plik") as text_file do otwarcia pliku i jedziesz linijka po linijce; str.split() do rozdzielenia wiersza, potem porównujesz i wypisujesz jak OK.

0

dzieki za odp, rozwiązałem to troche inaczej plik1=plik2.loc[(plik2[0]>1),:]

Mam jeszcze jeden problem, potrzebuje pousuwać wartości które różnią się od siebie o daną wartość podaną np 2

Przykładowo mam 2 tabelki

x y w
1 1 12
2 3 13
3 5 22
5 5 32
6 6 11
10 12 123
23 12 11

chcę w wyniku otrzymać tylko te wiersze w których dwie kolumny nie różnią się wartościami w nimi zawartymi mniej niż 2 czyli range od (0 do 2 bez 2), ale dodatkowo chciałbym nadać wagi które są określane przez kolumne 3,** jeżeli w zasięgu od 0 do 2 jest kilka punktów to usuń wszystkie poza najwyższą**. czyli w wyniku chciałbym mieć :

x y w
2 3 13
3 5 22
5 5 32
10 12 123
23 12 11

kolumny x i y mozna traktować jako kołożenie na osi a w jako wartość punktu
Dzięki za podpowiedzi!

0

@Althorion , cześć nie chce zakładać nowego tematu , potrzebuje pomocy w jednym problemie.

mam tabelkę

A B C
2.4 2.7 4
1.2 3.2 2
2.1 2.5 4
2.9 9.0 2

Potrzebuję: Jeżeli w drugim datasecie występuje w kolumnie C ta sama wartość to , usuń całą linię lecz zostaw tę (z tym samym C) gdzie wartość A i B jest większa niż A i B w moim drugim datasecie.
Próbowałem na poczatek czegoś takiego, ale nie działa:

if df['C']==df:
df.loc['A','B'].max()

chciałem tu sprawdzic czy mi wyciągnie dla najwyższych wartości A i B, ale nie łapie mi tego.

czyli na wyjściu dla mojego przykładu gdzie chce najwyzsza wartośc A i B dla duplikatu C:
A B C
1.2 3.2 2
2.1 2.5 4

Dzięki za pomoc

0

Słabo Cię rozumiem. Czy chodzi Ci o to, by zdeduplikować trzecią kolumnę w taki sposób, by wśród zwielokrotnionych wartości pozostawić tę, która ma maksymalną sumę z pierwszej i drugiej kolumny?

Jeśli tak, to idea podobna jak na początku: tak samo czytasz plik linia po linii i tak samo rozdzielasz. Potem robisz sobie słownik, gdzie kluczem jest wartość trzeciej kolumny, a wartościami tego słownika lista par (A, B). Potem przelecisz przez ten słownik pętlą for, na każdym z jego elementów wybierając odpowiednie maksimum (funkcja max może mieć podany własną funkcję porównującą) i masz.

0
Althorion napisał(a):

Słabo Cię rozumiem. Czy chodzi Ci o to, by zdeduplikować trzecią kolumnę w taki sposób, by wśród zwielokrotnionych wartości pozostawić tę, która ma maksymalną sumę z pierwszej i drugiej kolumny?

Jeśli tak, to idea podobna jak na początku: tak samo czytasz plik linia po linii i tak samo rozdzielasz. Potem robisz sobie słownik, gdzie kluczem jest wartość trzeciej kolumny, a wartościami tego słownika lista par (A, B). Potem przelecisz przez ten słownik pętlą for, na każdym z jego elementów wybierając odpowiednie maksimum (funkcja max może mieć podany własną funkcję porównującą) i masz.

Taaak, lecz nie sumę a pojedyńcze wartości A i B porównywane do innej kolumny A i B, Czyli : Jeżeli C=C2 to usuń te wiersze gdzie A> A2 i B> B2 .

0

Mhm. To problem szybko się robi paskudny.

Przygotowanie jak powyżej, czyli mamy słownik list par (A, B) adresowany po C. I teraz, tak od ręki, nie umiem podać ładniejszego rozwiązania niż „przy użyciu itertools.product() wygenerować sobie wszystkie możliwe pary, po czym odrzucić te, które spełniają Twój warunek” :(. Pogłówkuję jeszcze nad tym wieczorem, ale teraz niestety Cię muszę zostawić, może Ci kto inny pomoże z sensowniejszym rozwiązaniem.

0

Ok, troche pozmieniałem i stworzyłem nowy dataframe zeby nie porównywac dwóch plikow, powyzszy przykład całkiem niezły ale ja potrzebuje cos bardziej rozbudowanego.
a=pd.DataFrame({'A':a.groupby('A')['B'].max().index,'B':a.groupby('A')['B'].max().values}) podany przykład mi nie działa.
Ja potrzebuje wziąć pod uwagę trzy kolumny A B oraz C, A i B to kolumna z liczbami C to wartości które są podane i sa duplikowane .
Potrzebuje usunąć linie gdzie są powtarzajace się wartości w kolumnie C, biorąc jednocześnie pod uwagę kolumną A i B dla których wartosci będą największe:
przykład:
INPUT

A B C
0.1 0.2 4
0.1 0.2 4
0.3 0.2 4
0.4 0.3 3
0.2 0.1 3
0.7 0.2 3

OUTPUT

A B C
0.1 0.2 4
0.2 0.1 3

wartości A i B są porównywane osobno, nie jest to ich suma.

Update:
df.sort_values(['A', 'B']).drop_duplicates(subset=['C']) tym kodem rozwiązałem problem. prosty ale troche zajęło zanim rozkminiłem.

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