2017-12-25 3 views
0

Ich habe Datenrahmen ähnlich wie:Pandas alle aufeinander folgenden Zeilen Umbenennung basierend auf Bedingung

enter image description here

Sie können es neu mit diesem Code:

import pandas as pd 
df = pd.DataFrame({ 
    'A' : 1., 
    'name' : pd.Categorical(["hello","hello","hello","hello"]), 
    'col_2' : pd.Categorical(["2","2","12","Nan"]), 
    'col_3' : pd.Categorical(["11","1","3","Nan"])}) 

Ich möchte den Wert ändern "Name" in jeder Zeile mit "col_2" oder "col_3" höher als 10.

Also, wenn es eine Zahl höher als 10 in "col_2" oder in "col_3" gibt, alle Zeilen bis zum nex Eine t-Nummer, die höher als 10 ist, sollte umbenannt werden.

Hier ist, wie es am Ende aussehen sollte:

enter image description here

+3

Warum verwenden Sie pd.Categorical? –

Antwort

1

Sie es mit cumsum erreichen

name_index = df[['col_2', 'col_3']]\ 
    .apply(pd.to_numeric, errors='coerce')\ 
    .ge(10)\ 
    .any(axis=1)\ 
    .cumsum() 
df['name'] = df['name'].astype(str) + '_' + name_index.astype(str) 
print(df) 

    A col_2 col_3 name 
0 1.0 2  11  hello_1 
1 1.0 2  1  hello_1 
2 1.0 12  3  hello_2 
3 1.0 NaN NaN  hello_2 
+1

@AntonBR Ich stimme dir zu, aber nur in dem Fall, wenn die Eingabedaten nicht "Nan" Zeichenfolgen darin enthalten :) – tarashypka

+0

Nizza! Ich habe mir die Freiheit genommen, ein paar kleine Änderungen vorzunehmen (pd.to_numeric) und .ge() –

+1

Wow, habe ''errors =' coerce'' nicht bemerkt. Jetzt sieht es wirklich besser aus. Danke – tarashypka

Verwandte Themen