import numpy as np
# is the numeric value between -100 and 200?
m1 = pd.to_numeric(df['name2'], errors='coerce').between(-100, 200)
# is the count of the decimal not 2?
m2 = df['name2'].str.extract(r'\.(\d*[1-9]+)', expand=False).str.len().ne(2)
df['Error'] = np.where(m1&m2, 'No Issue', 'Issue')
输出量:
Name name2 Error
0 A 0.029 No Issue
1 B 0 No Issue
2 V 2 No Issue
3 D -0.000029 No Issue
4 E -0.11 Issue
Name name2 m1 m2 m1&m2 Error
0 A 0.029 True True True No Issue
1 B 0 True True True No Issue
2 V 2 True True True No Issue
3 D -0.000029 True True True No Issue
4 E -0.11 True False False Issue
cond = (df['name2'].astype(str).str.split('.').str[1].str.len() == 2) | (~df['name2'].between(-100, 200))
df['flag'] = np.where(cond, "issue", "no issue")
name name2 flag
0 A 0.029000 no issue
1 B 0.000000 no issue
2 C 2.000000 no issue
3 D -0.000029 no issue
4 E -0.110000 issue
2条答案
按热度按时间cngwdvgl1#
具体的逻辑并不清楚,因为你的描述和例子并不完全匹配,但是对于一般的逻辑,假设你想标记以2位数结尾的值,或者不在-100-200之间,你可以使用
pandas.to_numerid
+between
和一个带有str.extract
+str.len
的正则表达式:输出量:
可复制输入:
中间体:
hpxqektj2#
这是只使用
np.where
来得到你所问的答案。代码很容易阅读。