Условный выбор ячейки внизу в пандах - PullRequest
0 голосов
/ 28 января 2019

Я бегу по всем ячейкам в моей таблице, используя этот бит кода:

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

, который присваивает значение «1» в столбце a5 для всех строк, где значение в столбце месяцаэто "январь".Я хотел знать, есть ли способ присвоить «1» не этой строке, а строке ниже.

Я пытался просто сделать

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

, но это не такРабота.По некоторым причинам, которые я не совсем понимаю:

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

присваивает 1 строке, которая говорит "январь", и строке ниже.

Ответы [ 2 ]

0 голосов
/ 28 января 2019
df.loc[(df["month"]=="january"),"a5"]=1

А затем просто используйте shift, чтобы переместить его в следующую строку:

df["a5"].shift(1)

Должно работать.

0 голосов
/ 28 января 2019

вы можете сделать следующим образом.

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.Возвращает Series содержит True, если условие удовлетворяется, False в противном случае.
  • Идея в том, чтобы сдвинуть все значения на единицу и False в начале.
  • Надеюсь, это прояснит кое-что.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...