Pandas 数据框/系列之间的大于/小于比较

5
我该如何在DataFrame和Series之间进行比较?我想要屏蔽DataFrame / Series中大于/小于另一个DataFrame / Series的元素。
例如,以下代码未将大于均值的元素替换为NaN,这与我的预期不符:
>>> x = pd.DataFrame(data={'a': [1, 2], 'b': [3, 4]})
>>> x[x > x.mean(axis=1)] = np.nan
>>> x
   a  b
0  1  3
1  2  4

如果我们看一下比较所创建的布尔数组,它真的很奇怪:
>>> x = pd.DataFrame(data={'a': [1, 2], 'b': [3, 4]})
>>> x > x.mean(axis=1)
       a      b      0      1
0  False  False  False  False
1  False  False  False  False

我不明白这个布尔数组的逻辑是怎样的。我可以通过转置来解决这个问题:

>>> (x.T > x.mean(axis=1).T).T
       a     b
0  False  True
1  False  True

但我相信有一种“正确”的方法来完成这个任务,我不知道它是什么。至少我想了解发生了什么。

1个回答

2
问题在于它将索引解释为列值来执行比较,如果使用.gt并传递axis=0,则可以获得所需的结果。
In [203]:
x.gt(x.mean(axis=1), axis=0)

Out[203]:
       a     b
0  False  True
1  False  True

当您使用np数组进行比较时,您可以看到我的意思:

In [205]:
x > x.mean(axis=1).values

Out[205]:
       a      b
0  False  False
1  False   True

在这里,您可以看到默认的比较轴是在列上,从而导致不同的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接