So ändern Sie Spaltenwerte, die eine bestimmte Bedingung erfüllen, während die Werte für diese Spalte beibehalten werden, die die Bedingung nicht erfüllen


Schattenwanderer

In meinem Pandas-Datenrahmen habe ich zwei Spalten, die ich als X1 und Score betrachte . Ich beabsichtige, den Wert neu zu berechnen und den Werten in der Spalte Score neu zuzuweisen , wobei die jeweilige X1- Spalte jedoch weniger als 500 beträgt . Die Werte in Score , die diese Bedingung nicht erfüllen, sollten unverändert bleiben.

Wenn ich derzeit den folgenden Code ausführe, werden die Werte des Scores , der die Bedingung erfüllt ( Spalte X1 ist kleiner als 500 ) , korrekt geändert, aber die Werte für den Score , die nicht neu berechnet wurden, wurden in NaN umgewandelt, anstatt ihre ursprünglichen Werte beizubehalten.

def do_not_try_this(df, card, feature, val):
    if df[df[feature]<val][feature].iloc[0] < val:
        current_score = card[feature]['points'].iloc[0]
        print('Current point', current_score)
        min_desired_score = card[feature].min()['points']
        print('Min point', min_desired_score)
        df.iloc[:,21] = (df[df[feature]<val]['scores'] + np.sum([current_score, min_desired_score])).astype(int)
    else:
        df['scores'] = df.iloc[:,21]
    
    return df

# Call Function
df = airtel_base_scores_df.copy(deep=True)
feature = 'X1'
val = 500

df = do_not_try_this(df, card, feature, val)

Wie löse ich das?

NB df.iloc [:, 21] repräsentiert die Werte der Spalte Score

Jezreel

Ich denke du brauchst Veränderung:

df.iloc[:,21] = (df[df[feature]<val]['scores'] + np.sum([current_score, min_desired_score])).astype(int)

zu:

df.iloc[:,21] = ( df['scores'].mask(df[feature]<val, df['scores'] + np.sum([current_score, min_desired_score]))).astype(int)

für die Verarbeitung nur Werte, die den Bedingungen in entsprechen Series.mask.

Verwandte Artikel