Python/Pandas中R/ifelse的等价物?比较字符串列?

zon*_*ono 20 python numpy r 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
Run Code Online (Sandbox Code Playgroud)

熊猫

>>> 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
Run Code Online (Sandbox Code Playgroud)

我尝试了一些案例,但没有奏效.似乎字符串比较不起作用.

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

TypeError: 'str' object cannot be interpreted as an integer 
Run Code Online (Sandbox Code Playgroud)

请问你能帮帮我吗?


熊猫和numpy版本.

>>> pd.version.version
'0.16.2'
>>> np.version.full_version
'1.9.2'
Run Code Online (Sandbox Code Playgroud)

更新版本后,它工作正常!

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

jez*_*ael 16

您必须将pandas升级到上一版本,因为在版本中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']
Run Code Online (Sandbox Code Playgroud)