2016-02-27 13 views
8

私の目標は2つの列を比較し、結果列を追加することです。 Rはifelseを使用しますが、私はパンダの方法を知る必要があります。Python/PandasのR/ifelseに相当しますか?文字列を比較しますか?

R

> head(mau.payment) 
    log_month user_id install_month payment 
1 2013-06  1  2013-04  0 
2 2013-06  2  2013-04  0 
3 2013-06  3  2013-04 14994 

> mau.payment$user.type <-ifelse(mau.payment$install_month == mau.payment$log_month, "install", "existing") 
> head(mau.payment) 
    log_month user_id install_month payment user.type 
1 2013-06  1  2013-04  0 existing 
2 2013-06  2  2013-04  0 existing 
3 2013-06  3  2013-04 14994 existing 
4 2013-06  4  2013-04  0 existing 
5 2013-06  6  2013-04  0 existing 
6 2013-06  7  2013-04  0 existing 

パンダ

>>> maupayment 
user_id log_month install_month 
1  2013-06 2013-04    0 
     2013-07 2013-04    0 
2  2013-06 2013-04    0 
3  2013-06 2013-04   14994 

私はいくつかの例を試みたが、うまくいきませんでした。文字列の比較が機能しないようです。

>>>np.where(maupayment['log_month'] == maupayment['install_month'], 'install', 'existing') 

TypeError: 'str' object cannot be interpreted as an integer 

お願いします。


パンダとnumpyバージョン。


>>> pd.version.version 
'0.16.2' 
>>> np.version.full_version 
'1.9.2' 
は、更新後のバージョンでは、それが働きました!

>>> np.where(maupayment['log_month'] == maupayment['install_month'], 'install', 'existing') 
array(['existing', 'install', 'existing', ..., 'install', 'install', 
     'install'], 
     dtype='<U8') 

答えて

8

バージョン0.17.1では非常にうまく動作するため、パンダを最新バージョンにアップグレードする必要があります。

サンプル(カラムinstall_monthの最初の値は、マッチングのために変更される):

print maupayment 
    log_month user_id install_month payment 
1 2013-06  1  2013-06  0 
2 2013-06  2  2013-04  0 
3 2013-06  3  2013-04 14994 

print np.where(maupayment['log_month'] == maupayment['install_month'], 'install', 'existing') 
['install' 'existing' 'existing'] 
関連する問題