如何比较两个不同列之间的pandas值?

时间:2015-10-15 07:55:07

标签: python-2.7 pandas

我的表:

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))]

但是它已经很久了,我将无法为许多国家写作。

1 个答案:

答案 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字典。