首页 > 解决方案 > 通过迭代将文本附加到列表中

问题描述

我正在尝试根据不同的情况将颜色附加到列表中。总共有 4 种可能性,如下所述。但是,我在第一个 if 语句中遇到 KeyError = 0 :

col =[] 
x = df2["Prog Passes"]/df2["90s"]
y = df2["Prog Carr"]/df2["90s"] 

for i in range(0, len(x)): 
    if x[i]<=x.mean & y[i]<=y.mean: 
        col.append('yellow')   
    elif x[i]>=x.mean & y[i]<=y.mean: 
        col.append('green')
    elif x[i]<=x.mean & y[i]>=y.mean: 
        col.append('blue')
    else: 
        col.append('magenta')

任何想法为什么会出现这种情况以及我如何解决这个问题?

编辑:

@bici-sancta。谢谢!这看起来很有希望。我试过了,我收到一个错误:

TypeError:无法使用 dtyped [float64] 数组和 [bool] 类型的标量执行“rand_”

这是我的代码:

df2["PP90"]= df2["Prog Passes"]/df2["90s"]
df2["PC90"]= df2["Prog Carr"]/df2["90s"]
x = df2["PP90"]
y = df2["PC90"]
df2["Colour"] = "red"
df2.loc[x<x.mean() & y<y.mean(), "Colour"] = 'yellow'
df2.loc[x>x.mean() & y<y.mean(), "Colour"] = 'blue'
df2.loc[x<x.mean() & y>y.mean(), "Colour"] = 'green'
df2.loc[x>x.mean() & y>y.mean(), "Colour"] = 'magenta'
df2

任何想法为什么会发生这种情况?

标签: pythonpandasloops

解决方案


我认为这是你想要完成的一个例子。如果完成后需要,您可以将数据框的最后一列(“颜色”)提取到列表中。我使用了一个简单的值测试,但您可以轻松地替换平均值

对于多条件测试,请在每个测试条件周围使用括号... df2.loc[(x<x.mean()) & (y<y.mean()), "Colour"]

import pandas as pd

df = pd.DataFrame(data = {'a' : [1,2,3,4,5,6,7,8,9], 'b':[9,8,7,6,5,4,3,2,1]})

df['a_div_b'] = df['a'] / df['b']

# set default color (at one extreme of the value condition test)
df['color'] = 'red'

# successively change colors based on incremental increase in quotient value
df.loc[df['a_div_b'] > 1, 'color'] = 'blue'
df.loc[df['a_div_b'] > 2, 'color'] = 'magenta'
df.loc[df['a_div_b'] > 3, 'color'] = 'cyan'

print(df)

推荐阅读