对比两列判断高低:为何代码始终返回True?
问题原因与解决方法
你的代码错误在于比较的是列名的字符串大小,而非列中的实际数值:
GCClose.columns[0]和GCClose.columns[1]返回的是列的名称(比如"MGC=F"和"lag2open"),把它们放进列表[]里做>=比较,本质是在对比两个字符串的字典序,而不是逐行比较列内的数值。这个单一的比较结果(比如字符串"lag2open"比"MGC=F"字典序大,结果为True)会被赋值给整个Higher than 0列,所以所有行都显示True。
正确写法
你需要直接对列的数值进行逐行比较,有两种常用方式:
- 直接通过列名索引(最直观):
GCClose["Higher than 0"] = GCClose["lag2open"] >= GCClose["MGC=F"]
- 按列的位置索引取值比较:
# 用iloc按位置取整列 GCClose["Higher than 0"] = GCClose.iloc[:, 1] >= GCClose.iloc[:, 0] # 或者通过columns索引取列对象 GCClose["Higher than 0"] = GCClose[GCClose.columns[1]] >= GCClose[GCClose.columns[0]]
内容的提问来源于stack exchange,提问作者Rafael Alexandre Sousa
相关产品推荐
相关产品推荐

