有条件地选择下面的熊猫细胞

时间:2019-01-28 18:51:16

标签: python python-3.x pandas dataframe

我正在使用以下代码遍历表中的所有单元格:

 df.loc[(df["month"]=="january"),"a5"]=1

在a5列中,为month列中的值为“ january”的所有行分配值“ 1”。我想知道是否有办法将“ 1”分配给该行而不是该行。

我试图做

df.loc[(df["month"]=="january")+1,"a5"]=1

但是它不起作用。由于某种原因,我不太了解,:

df.loc[(df["month"]=="january")+2,"a5"]=1

将1分配给表示“一月”的行,并将其分配给下面的行。

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作。

import pandas as pd
df = pd.DataFrame.from_dict({'month':['j','k','j','k'],'a5':[10,10,10,10]})

index = (df["month"]=="j").shift(1) # shift by 1 after shifting first value will be nan so we need to fill that with False
index[0] = False # 

df.loc[index,'a5']=1 
print(df)
>>>  
   month  a5
0     j   10
1     k    1
2     j   10
3     k    1

  • 编写查询时,请注意df['somthing'] = x。如果条件满足,它将返回包含True的Series,否则返回False
  • 这里的想法是在开始时将所有值向下移1和False
  • 我希望这可以澄清一些事情。

答案 1 :(得分:0)

df.loc[(df["month"]=="january"),"a5"]=1

然后使用shift将其移至下一行:

df["a5"].shift(1)

应该工作。