我正在尝试where
在我的Pandas DataFrame上使用替换所有不符合我标准的单元格NaN
.但是,我想以这样的方式执行此操作,始终保留原始DataFrame的形状,而不是从生成的DataFrame中删除任何行.
给定以下DataFrame:
A B C D
1/1 0 1 0 1
1/2 2 1 1 1
1/3 3 0 1 0
1/4 1 0 1 2
1/5 1 0 1 1
1/6 2 0 2 1
1/7 3 5 2 3
Run Code Online (Sandbox Code Playgroud)
当列D
ALSO满足特定条件时,我想在数据帧中搜索满足特定条件的所有单元格.在这种情况下,我的标准是:
当列D也> 1时,查找大于先前值的所有单元格
我通过使用以下语法完成此任务:
matches = df[df > df.shift(1))]
matches = matches[df.D > 1]
Run Code Online (Sandbox Code Playgroud)
我必须将此查询拆分为两个语句,因为它df.D
是一个Series并且与整个DataFrame的形状不匹配.根据我之前提出的这个问题,&
直到0.14才能获得对广播运营商的支持.
我遇到的问题是,似乎在我运行第二个语句后,结果数据框的形状发生了变化,行已被删除.列数保持不变.第一个语句保留原始行数.
为什么第二个语句删除行而第一个语句没有?我怎样才能获得相同的结果,但保留完整的行数?
编辑:
pandas文档声明为了保证形状被保留,我应该使用where
方法而不是布尔索引.但是,似乎不允许执行我的第二个声明,因此:
matches.where(df.D > 1)
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
ValueError:数组条件必须与self相同