【发布时间】:2018-08-10 15:30:24
【问题描述】:
我有一个如下所示的数据框:
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/total:
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().
如何改进代码。
【问题讨论】:
-
x/x.sum()应该返回什么? -
为什么不只检查一个数字是否为负数?
x/x.sum()只会在x < 0或x.sum() < 0时为负数?你甚至不需要lambda函数。您可以将 Dataframe 中的所有负值替换为None,并将总和小于 0 的行设置为None。 -
x/x.sum() 是:单元格中的值除以一行中所有单元格中的值之和。
-
这不是
if/else或lambda的问题,而是应该如何将一系列值视为布尔值。 -
“如果单元格总数相同”是什么意思?
标签: python pandas if-statement dataframe lambda