You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取DataFrame中多列同时满足指定值的首个行索引?

搞定这个索引筛选问题!

嗨,我知道你现在卡在怎么从这个DataFrame里找出flag1和flag2都是1的第一行索引了,之前的代码报错其实是个很容易踩的小坑——运算符优先级搞混了

你写的df.flag1 == 1.0 & df.flag2 == 1.0会被Python优先解析成df.flag1 == (1.0 & df.flag2) == 1.0,这完全不是你想要的“两个条件同时满足”的逻辑,自然会报错啦。

正确的写法来啦

只需要给每个判断条件单独加上括号,让程序先判断每一列的条件,再做逻辑与操作就行:

import pandas as pd
import numpy as np

# 你的示例DataFrame
df = pd.DataFrame({ 
    'seq':[0,1,2,3,4,5,6,7,8,9,10,11], 
    'flag1':[np.nan,np.nan,1,1,1, 0,-1,-1,1,1,1,0], 
    'flag2':[np.nan,np.nan,np.nan,0, 0,0,-1,-1,0,1, 0,1] 
})

# 正确筛选并获取第一行索引
target_index = df[(df.flag1 == 1.0) & (df.flag2 == 1.0)].index[0]
print(target_index)  # 输出正好是你要的9!

额外小提示

  • 如果你的数据里有更多空值情况,担心干扰筛选,可以加上notna()来排除空值行(不过你的示例里目标行没有空值,所以不用,但留着备用总没错):
    target_index = df[(df.flag1.notna()) & (df.flag1 == 1.0) & (df.flag2.notna()) & (df.flag2 == 1.0)].index[0]
    
  • loc写法会更清晰,也能达到同样效果:
    target_index = df.loc[(df.flag1 == 1.0) & (df.flag2 == 1.0), :].index[0]
    

这样就能顺利拿到你想要的索引啦!

内容的提问来源于stack exchange,提问作者ds_student

火山引擎 最新活动