2017-12-04 1 views
2

하나의 열 (acount_no)에 해당 값으로 빈 문자열, 공백 문자열 및 반복 숫자 문자열이 포함되어 있습니다. 이 값에 대해 새 열 (valid_account_no)을 만들고 해당 행에 False을 설정하고 싶습니다. 또한 account_no 길이가 <= 4이면 False ~ valid_account_no으로 설정됩니다. 더 좋은 방법이 더 간결하고 효율적으로 만들기 위해 의미에서,이가 달성 할 수 있다면 나는 궁금pandas 정규식 일치를 사용하여 다른 열의 값을 기준으로 열의 부울 값을 설정했습니다.

id account_no valid_account_no 
1     False 
2  999999  False 
3  1234   False 
4  123456  True 

이 내 코드,

# 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 

, 같은 df 보인다.

답변

2

당신의 접근 방식 자체가 좋은 경우는, 또 다른 해결책은 간단한 부울 대수 즉

m1 = df['account_no'].str.match(r"\b(\d)\1+\b| +") 
m2 = df['account_no'].str.len()<=4 
m3 = df['account_no'] == '' 
df['valid_account_no'] = (m1) | (m2 & m3) 
+1

는 [ 'account_no'] df라고 내 OP ('사용해야에서 실수를했다. str.len() <= 함께 4) | '&'대신에 (df [ 'account_no'] == '')'' – daiyue