将变量影响到python 3中的dataframe列

时间:2016-03-07 14:11:35

标签: python windows pandas

我有按ID和时间排序的数据帧,请参阅下文:

ID  TIME    VAR 1   VAR 2  
001   1h     x          1
001   2h     y          2
001   3h     x          1  
001   4h     z          1
002   1h     x          1
002   2h     x          2
002   3h     z          1

我想在这个条件下添加一个变量CR:

 - if for a same id, it(the id) already had VAR2 = 2, and after that, VAR1 = X. 
 -  Then CR = 1, else 0. 

最终的df应该是这样的:

ID   TIME  VAR 1   VAR 2   CR
001   1h    x        1      0
001   2h    y        2      0
001   3h    x        1      1 
001   4h    x        1      1
002   1h    x        1      0
002   2h    x        2      0
002   3h    z        1      0

我不知道如何获取ID的历史值并影响值1.

我认为有2个循环可能,我设法为TIME创建排名,但不是ID。我试过那段代码:

`cumul = 1
 i=1
 while i < df.USER_ID.count() : 
    if df.USER_ID[i:(i+1)] == df.USER_ID[(i+1):(i+2)]:
        cumul == cumul 
    else :
        cumul +=1
    i +=1` 

它显示错误:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如错误消息提示,请执行(如果您希望所有内容都匹配):

cumul = 1
i=1
while i < df.USER_ID.count() : 
  if df.USER_ID[i:(i+1)].all() == df.USER_ID[(i+1):(i+2)].all():
      cumul == cumul 
  else :
      cumul +=1
  i +=1

虽然你也应该知道df.USER_ID[i:(i+1)]df.USER_ID[(i+1):(i+2)]是恰好一个元素的系列,但python在[start,end]上运行,即[start,end-1]范围。这基本上意味着df.USER_ID[i:(i+1)]df.USER_ID[i]

同时也很惊讶你以后不会遇到其他问题,因为你的while循环应该i+1 < df.USER_ID.count()当然没有处理最后一个元素。