2015-10-15 73 views
1

我的表:如何比較兩個不同列中熊貓的值?

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

請告訴我如何在單個數據框中儘可能地做到這一點的更好方法。

我想這

但越來越長,我就不能寫了許多國家。

+0

請問你能告訴我什麼是錯的,或者我你是否投了我的問題 –

+0

@Evan Wright你能幫我在這裏。 –

回答

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與更多的國家需要字典。

+0

感謝您的回覆。如果沒有拉姆達,我可以問更多的解決方案嗎?但是很有幫助。 –

+0

如果您可以在讀取數據時將代碼的類型設置爲字符串,則可以用'len'代替lambda函數。如果其中一個國家/地區代碼長度爲3,那麼您可能會遇到問題,因爲NaN將被解釋爲正確的長度,因此您需要更換NaN。 –