2014-09-25 78 views
0

我一直在尋找了好一陣子沒有沒有得到任何地方接近我想做的事......Python的比較行兩列,寫一個結果有條件

我有我想要一個數據幀大熊貓將A列與B列的值進行比較,如果A和B相等,則在新列中寫入1或0。

我可以寫一個醜陋的循環,但我知道這不是很pythony。

我很確定有一種方法可以使用apply()來做到這一點,但我沒有得到任何地方。

我想能夠比較包含整數以及包含字符串的列的列。

在此先感謝您的幫助。

+0

'df'的意思是'DataFrame'?這是熊貓的問題嗎? – dawg 2014-09-25 17:43:39

+0

是pandas dataframe對不起。 – Bastien 2014-09-25 17:48:28

回答

5

如果df是熊貓數據幀,然後

df['newcol'] = (df['A'] == df['B']).astype('int') 

例如,

In [20]: df = pd.DataFrame({'A': [1,2,'foo'], 'B': [1,99,'foo']}) 

In [21]: df 
Out[21]: 
    A B 
0 1 1 
1 2 99 
2 foo foo 

In [22]: df['newcol'] = (df['A'] == df['B']).astype('int') 

In [23]: df 
Out[23]: 
    A B newcol 
0 1 1  1 
1 2 99  0 
2 foo foo  1 

df['A'] == df['B']返回一個布爾值系列:

In [24]: df['A'] == df['B'] 
Out[24]: 
0  True 
1 False 
2  True 
dtype: bool 

astype('int')True/False的值轉換爲整數 - 對於False爲0,對於True爲1。

+0

如何指示python在該新列中寫入1或0?如果A和B的內容是字符串,我該如何解決這個問題? – Bastien 2014-09-25 17:56:06

+0

你的更好!我有一個'.apply(lambda x:1 if x else 0)',在這種情況下,它比較慢。 – dawg 2014-09-25 18:12:22

+0

太棒了。謝謝你的幫助! – Bastien 2014-09-25 19:21:52