Python: Jak przekazać wiersz i DataFrame.apply metodę następnego rzędu ()?

głosy
0

Mam DataFrame z tysięcy wierszy. Jego struktura jest jak poniżej

     A    B    C     D 
 0   q   20    'f'
 1   q   14    'd'
 2   o   20    'a'

Chcę porównać kolumnie A bieżącego wiersza i następnego rzędu. Jeśli te wartości są równe chcę dodać wartość kolumny B, które obniżają wartość D kolumnie porównaniu rzędu, która ma większą wartość. Następnie chcę usunąć przeniesionego wartość kolumny z kolumny B. To jak proces wymiany.

    A    B    C     D 
0   q   20    'f'   14
1   o   20    'a'

Mam tysiące wierszy i iloc Loc, na metody działają powoli. Przynajmniej chcę użyć DataFrame zastosować metodę. Próbowałem kilka próbek kodu, ale nie działa.

Chcę zrobić coś jak poniżej: DataFrame.apply (lambda wiersz: self.compare (wiersz, obok (wiersz)), oś = 1))

Mam porównanie metody, ale nie mogłem przejść następny wiersz do porównania metody. W jaki sposób można przekazać je do metody? Jestem również otwarty usłyszeć szybciej pandy rozwiązań.

Utwórz 19/03/2020 o 21:58
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Lepiej nie robić z applyjak to będzie powolny; można spojrzeć na użyciu shift, np

df['A_shift'] = df['A'].shift(1)
df['Is_Same'] = 0
df.loc[df.A_shift == df.A, 'Is_Same'] = 1

Pobiera trochę bardziej skomplikowane, jeśli robisz przesunięcie w grupach, ale nadal możliwe.

Odpowiedział 19/03/2020 o 22:03
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more