首页 > 解决方案 > Pandas Dataframe ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

问题描述

我正在尝试向使用其他列创建到达行的“绿色分数”的数据框添加一个新列。在下面的示例中,我希望每辆“模型”汽车都有一个分数,以显示汽车的“绿色”程度。

我的数据(简化):

cars = {'Model': ['Honda Civic','Toyota Corolla','Smart Car','Tesla'],
        'Green Fuel': [False, False, True, True],
        'Energy Use': ['High','Medium','Low','Low'],
        }

df = pd.DataFrame(cars, columns = ['Model', 'Green Fuel', 'Energy Use'])

df['Green Score'] = 0

打印汽车数据框:

    Model   Green Fuel  Energy Use  Green Score
0   Honda Civic     False   High    0
1   Toyota Corolla  False   Medium  0
2   Smart Car   True    Low     0
3   Tesla   True    Low     0

现在,要计算Green Scores每个模型的,我正在尝试这个:

for car in df['Model']:
    if df['Green Fuel'] == True:
        df['Green Score'] += 1
    else:
        pass

但是,当我运行它时,我得到了错误:

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

有人可以指出我如何解决这个错误的正确方向吗?

标签: pythonpython-3.xpandasdataframe

解决方案


首先最好是忘记for在熊猫中使用循环,如果存在一些矢量化方法 - 例如,这里可以将布尔值转换为整数并与映射另一列求和(只是我的想法,我尝试有创意;)):

d = {'High':1,'Medium':2,'Low':3}
df['Green Score'] = df['Green Fuel'].astype(int) + df['Energy Use'].map(d)
print (df)
            Model  Green Fuel Energy Use  Green Score
0     Honda Civic       False       High            1
1  Toyota Corolla       False     Medium            2
2       Smart Car        True        Low            4
3           Tesla        True        Low            4

推荐阅读