python 如果B列数据中满足某个条件,则对A列数据相应行的上一行的数据进行赋值

如下图:

如果b列数据等于8,则对a列数据对应的行的上一行数据进行赋值,出去for循环,有没有其它简单的办法?

可以先找到b列等于8的行号列表   然后再对这个列表进行-1操作,得到需要对a列处理的行号,然后赋值就行了。不过如果index是乱的话可以重新赋予一下index再进行,不然-1得不到上一行

首先你需要知道8在b列的哪些位置吧?不遍历一次b列做不到的。

df=pd.DataFrame(xxxx)
row=df[df['b'].isin([8])].index
print(row)
for i in row:
    df["a"][i-1]=xxx

按照你的意思,使用pandas可以这么取,返回8所在的行,但是其中的原理还是使用遍历的方法。

最后遍历row,修改a列的值。

假如将b列为8的a列数据对应的行的上一行数据全部赋值为0,代码:

import pandas as pd 

a=pd.DataFrame({"a":[1,1,2,2,3,3],"b":[5,6,7,8,9,8]})

b=a[a.b==8].index

#不循环的话就要一个一个赋值:

a.a.iloc[b[0]-1]=0

a.a.iloc[b[1]-1] = 0

print(a)

‘’‘

#用循环

for i in b:

    a.a.iloc[i-1]=0

print(a)

’‘’