Ich habe eine df
, die eine Spalte (acount_no
) enthält leere Strings, Leerzeichen und wiederholte Ziffern Strings als seine Werte. Für diese Werte möchte ich eine neue Spalte anlegen (valid_account_no
) und False
auf die entsprechenden Zeilen setzen. Auch wenn die Länge von account_no
<=
4 ist, werden sie False
zu valid_account_no
gesetzt. die df
aussieht,Pandas setzen boolesche Werte für eine Spalte basierend auf Werten einer anderen Spalte mit regex übereinstimmen
id account_no valid_account_no
1 False
2 999999 False
3 1234 False
4 123456 True
dies mein Code,
# sets boolean values of column valid account no when account no is spaced or repeated number
df['valid_account_no'] = df['account_no'].str.match(r"\b(\d)\1+\b| +")
# if length of any account nos are <= 4 or the account nos are empty
# set values of column valid account no to False
invalid_account_indices = df[(df['account_no'].str.len() <= 4) |
(df['account_no'] == '')].index
df.loc[invalid_account_indices, 'valid_account_no'] = False
Ich frage mich, ob es einen besseren Weg, dies zu erreichen, in einem gewissen Sinn es prägnanter und effizienter zu machen.
einen Fehler in meinem OP gemacht, sollte 'verwenden (df [ 'account_no']. Str.len() <= 4) | (df ['account_no'] == '') 'anstelle von' & ' – daiyue