我有一个数据帧,看起来像:
A B C D SUM
2 5 -4 12 15
我试着跑:
df.apply((lambda x: x / x.sum() if x/x.sum() >= 0 else None), axis=1).fillna(0)
要得到,如果单元格总数相同,则计算x/总数:
A B C D
2/15 5/15 0 12/15
我得到:
'The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
如何改进代码。你知道吗
你把^{} 和^{} 搞混了。它们是不同的方法:一种对一个系列进行操作,对每个元素进行操作;另一种沿着一个轴跨数据帧进行操作。在后一种情况下,沿着
axis=1
意味着每个行被顺序地馈送到函数。你知道吗因为这些
apply
方法(两个版本)都是隐蔽的循环,所以每次按列lambda
调用之后,数据帧都会发生变化。因此,您需要使用数据帧的副本:然而,这一切都是非常低效的。我们没有使用底层NumPy数组。相反,可以使用矢量化操作:
相关问题 更多 >
编程相关推荐