【发布时间】:2018-07-06 23:10:45
【问题描述】:
我有一个如下所示的数据框:
total downloaded avg_rating
id
1 2 2 5.0
2 12 12 4.5
3 1 1 5.0
4 1 1 4.0
5 0 0 0.0
我正在尝试添加一个新列,其中两个列的百分比差异,但仅适用于“已下载”中没有 0 的列。
我正在尝试使用如下所示的函数:
def diff(ratings):
if ratings[ratings.downloaded > 0]:
val = (ratings['total'] - ratings['downloaded']) / ratings['downloaded']
else:
val = 0
return val
ratings['Pct Diff'] = diff(ratings)
我收到一个错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-129-729c09bf14e8> in <module>()
6 return val
7
----> 8 ratings['Pct Diff'] = diff(ratings)
<ipython-input-129-729c09bf14e8> in diff(ratings)
1 def diff(ratings):
----> 2 if ratings[ratings.downloaded > 0]:
3 val = (ratings['total'] - ratings['downloaded']) /
ratings['downloaded']
4 else:
5 val = 0
~\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
953 raise ValueError("The truth value of a {0} is ambiguous. "
954 "Use a.empty, a.bool(), a.item(), a.any() or
a.all()."
--> 955 .format(self.__class__.__name__))
956
957 __bool__ = __nonzero__
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
有人可以帮我理解这个错误的含义吗?
另外,这对于应用功能来说是一个很好的应用程序吗?我可以在申请中使用条件吗?在这种情况下我将如何使用它?
【问题讨论】:
-
嗯,根据你的说法,
if ratings[ratings.downloaded > 0]什么时候应该是True?如果有 any 行True,或 all? -
您的预期输出是什么样的?
-
如果您提供生成该数据帧的代码会更容易检查
-
@WillemVanOnsem 不确定您所问的确切差异。对于条件为真的每一行,执行计算并放入新列(对于任何为假的,它将除以 0,这是我试图避免的)。
-
@juanpa.arrivillaga 预期的输出是一个包含计算结果的新列。在显示的 5 行的情况下,答案都是 0.0(例如 (2-2)/2 = 0),但对于整个 df 来说并非如此。
标签: python python-3.x pandas valueerror