Pandas DataFrames / Series之间的比较大于/小于

时间:2015-11-05 10:30:08

标签: python pandas

如何在DataFrame和Series之间进行比较?我想掩盖DataFrame / Series中比其他DataFrame / Series中的元素更大/更小的元素。

例如,以下内容不会替换大于均值的元素 与nans虽然我期待它:

>>> 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 个答案:

答案 0 :(得分:1)

这里的问题是它将索引解释为列值以执行比较,如果您使用.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

在这里你可以看到比较的默认轴在列上,导致结果不同