使用包含其他数据帧的逻辑语句创建数据框

时间:2018-01-30 07:34:59

标签: python python-3.x pandas dataframe

我无法找到一个更好的标题来解决我的问题,但问题是,让我们假设我们有一个电影评论的数据框。我想创建另一个包含1星或5星评价的数据框。

我选择了这种方法:

movie_class = movie[movie['stars'] == 1 | movie['stars'] == 5]

然而,这给了我一个错误。但是当我只用一个条件创建数据帧时,代码工作正常。

movie = movie[movie['stars'] == 1]

无法理解原因。

错误:

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-22-2fe827919d94> in <module>()
----> 1 movie_class = movie[movie['stars'] == 1 | movie['stars'] == 5]

~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __nonzero__(self)
   1119         raise ValueError("The truth value of a {0} is ambiguous. "
   1120                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1121                          .format(self.__class__.__name__))
   1122 
   1123     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

1 个答案:

答案 0 :(得分:1)

根据我对你的问题的理解,这个例子可能就是你想要实现的目标:

Generatung类似的数据框,

import pandas
import random

movie = [random.randint(0,5) for i in range(20)];
df = pandas.DataFrame(movie, columns = ['stars']);

独立分类1星和5星布尔:

one_star_bool = df['stars']==1;
five_star_bool = df['stars']==5;

获取数据:

one_star = df['stars'][one_star_bool];
five_star = df['stars'][five_star_bool];

当然,您可以将这两者结合起来获得1星或5星,但要直接获取它,您可以使用:

one_or_five = df['stars'][one_star_bool | five_star_bool];

这可以吗?