我有一个关于 pandas 列上的多个条件的问题。我有以下数据框:
A B C
0 0 9 0
1 1 8 0
2 1 9 0
3 1 5 1
4 1 9 1
5 1 8 1
6 -1 9 0
7 -1 5 -1
8 -1 7 -1
我想要实现的目标如下:
1.) 如果 A>0 且 B <6 C 应变为 1 并保持不变,直到 A 发生变化(B 可能达到 6 以上)
2.) 如果 A<0 且 B <6 C 应变为 -1 并保持不变,直到 A 发生变化(B 可能高于 6)
有什么建议如何在没有循环的情况下做到这一点吗?
我正在努力解决如何“记住”当前 A= 1 或 A=-1 期间 B 低于 6 的状态。
感谢您的建议
最佳答案
当满足您自己的条件时,使用np.select
创建您的帮助列,然后我们使用bfill
进行groupby
s1=(df.A>0)&(df.B<6)
s2=(df.A<0)&(df.B<6)
df['v']=np.select([s1,s2],[1,-1])
df.v.replace(0,np.nan).groupby(df.A).ffill().fillna(0).astype(int)
Out[1023]:
0 0
1 0
2 0
3 1
4 1
5 1
6 0
7 -1
8 -1
关于Python:关于 pandas 列的多个条件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52668529/