如何在 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
这里可以看到默认的比较轴是在列上,导致了不同的结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)