如下图:
如果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)
’‘’