我正在尝试where
在我的 Pandas DataFrame 上使用将所有不符合我的标准的单元格替换为NaN
. 但是,我希望以始终保留原始 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
D
当列ALSO 满足特定条件时,我想在数据框中搜索满足特定条件的所有单元格。在这种情况下,我的标准是:
当列 D 也 > 1 时,查找所有大于前一个值的单元格
我通过使用以下语法来完成此操作:
matches = df[df > df.shift(1))]
matches = matches[df.D > 1]
我必须将此查询拆分为两个语句,因为它df.D
是一个系列并且与整个 DataFrame 的形状不匹配。根据我之前提出的这个问题&
,对广播运营商的支持要到 0.14 才可用。
我遇到的问题是,在我运行第二条语句之后,结果数据框的形状发生了变化,并且行已被删除。列数保持不变。第一条语句保留原始行数。
为什么第二个语句会删除行而第一个语句不会?我怎样才能获得相同的结果,但保留完整的行数?
编辑:
熊猫文档指出,为了保证形状被保留,我应该使用where
布尔索引的方法。但是,这似乎不允许执行我的第二个语句,所以:
matches.where(df.D > 1)
给我以下错误:
ValueError:条件数组必须与自身的形状相同