我的表:
A Country Code1 Code2
626349 US 640AD1237 407223
702747 NaN IO1062123 407255
824316 US NaN NaN
712947 US 00220221 870262123
278147 Canada 721AC31234 109123
278144 Canada NaN 7214234321
278142 Canada 72142QW134 109123AS12
在上表中,我需要检查国家/地区和代码。
我想要第5列正确或错误的伪代码:
If 'Country' == 'US' and (length(Code1) OR length(Code2) == 9):
Add values to 5th column as correct.
else:
Add values to 5th column as incorrect.
If 'Country' == 'Canada' and (length(Code1) OR length(Code2) == 10):
Add values to 5th column as correct.
else:
Add values to 5th column as incorrect.
如果国家或代码栏中没有值,那么信息不足。
我无法理解我应该如何在熊猫中做到这一点。请帮忙。感谢。
我试图首先找到Code1和Code2的行长并将其存储在不同的df
中,但之后我无法将不同的数据集作为我需要做的事情进行比较。
Len1 = df.Code1.map(len)
Len2 = df.Code2.map(len)
LengthCode = pd.DataFrame({'Len_Code1': Len1,'Len_Code2': Len2})
如果可能,请告诉我如何在单个数据框中执行此操作的更好方法。
我试过了
df[(df.Country == 'US') & ((df.Code1.str.len() == 9)|(df.Code2.str.len() == 9))|(df.Country == 'Canada') & ((df.Code1.str.len() == 10)|(df.Code2.str.len() == 10))]
但是它已经很久了,我将无法为许多国家写作。
答案 0 :(得分:2)
这会给你一个' is_correct'布尔列:
code_lengths = {'US':9, 'Canada':10}
df['correct_code_length'] = df.Country.replace(code_lengths)
df['is_correct'] = (df.Code1.apply(lambda x: len(str(x))) == df.correct_code_length) | (df.Code2.apply(lambda x: len(str(x))) == df.correct_code_length)
您需要根据需要在更多国家/地区填充code_lengths字典。