如何在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
但我相信有一些“正确”的做法,我不知道.至少我想了解发生了什么.
最佳答案 这里的问题是它将索引解释为列值来执行比较,如果你使用.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
在这里,您可以看到用于比较的默认轴在列上,从而产生不同的结果