Python 带条件的布尔表达式中的问题

Python 带条件的布尔表达式中的问题,python,pandas,data-science,Python,Pandas,Data Science,我试图根据列质量设置新变量“not_good”、“good”和“very good”。 因此,数据集中的每一行,其中一个变量中只有“1”,其余两个变量中只有两个“0”。 我使用了上面的代码 for i in range(1599): if (data.quality[i] == 3) or (data.quality[i] == 4): data.not_good = 1 if (data.quality[i] == 5) or (data.quality[i] == 6): d

我试图根据列质量设置新变量“not_good”、“good”和“very good”。 因此,数据集中的每一行,其中一个变量中只有“1”,其余两个变量中只有两个“0”。 我使用了上面的代码

for i in range(1599):
if (data.quality[i] == 3) or (data.quality[i] == 4):
    data.not_good = 1
if (data.quality[i] == 5) or (data.quality[i] == 6):
    data.good = 1
if (data.quality[i] == 7) or (data.quality[i] == 8):
    data.very_good =1
单元格运行得很好,但我发现我添加的所有变量对于所有行都等于1。

您有一个对象数据。 该数据对象有4个变量:

not_good : int
good : int
very_good : int
quality : int[] # int array
只要其中一个数据不是很好、很好或很好,你到处都有一个。 当您选择的类型不是int而是int[]时,可以解决此问题,然后代码如下所示:

data_length = 1599

data.not_good = [0]*data_length
data.good = [0]*data_length
data.very_good = [0]*data_length

for i in range(data_length):
if (data.quality[i] == 3) or (data.quality[i] == 4):
    data.not_good[i] = 1
if (data.quality[i] == 5) or (data.quality[i] == 6):
    data.good[i] = 1
if (data.quality[i] == 7) or (data.quality[i] == 8):
    data.very_good[i] =1
  • 使用Pandas时,应尽可能避免显式循环
  • 与其使用0或1,不如只使用布尔值
  • 与其有三列,每个质量级别一列,为什么不使用一个分类列?您可以在Pandas中阅读有关分类数据的更多信息

假设“…good”变量也是列,您必须为特定行添加“[i]”来设置它们。您能分享一些示例数据吗?这不是很清楚。而且,没有理由使用0和1,布尔值更合适。最好有一个分类数据类型的单列,它将包含三个质量级别中的一个。就在我将新变量定义为inta=['not_good'、'good'、'very_good']之前的单元格,对于范围(3)中的i:data[a[i]]=np.NaN且“质量”为int64type@TrikiSadok它是int64还是其他东西其实并不重要。关键是一个是列表/数组,另一个不是。初始化证明了我写的东西?我不知道你想告诉我什么?