比较两列时出现值错误



我正在尝试将特定列的值与其中一列的值进行比较,并根据它们的比较索引将结果存储到新列中,例如:如果值相差超过 10%,则为低,否则则确定。

df["Index"] = ""
def function(df):
for i in range(1, len(df.columns)-2):
if((df.columns.values[1]) == (df.columns.values[i+1])):
if((df.iloc[:,1]) < (0.9 * df.iloc[:,i+1])):
df["Index"] = "Low"
else:
df["Index"] = "OK"
function(df)

有什么关系

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

到这个?如果有人也可以提出使用相同的代码结构降低时间复杂度的方法,那就太好了。

是否要根据其后的任何列检查年龄?如果其中一个少 90%,那么结果是"确定"?我不确定你需要的逻辑是不是这个?

df = pd.DataFrame({'char':['A', 'B', 'C', 'D'],'Age':[20, 21, 19, 18],'Age1':[29, 27, 25, 26],'Age2':[60, 48, 55, 62], 'Age3':[60, 48, 55, 62],'Age4':[60, 48, 55, 62],'Age5':[18, 19, 17, 12]})
df["Index"] = ""
def function(df):
for i in range(1, len(df.columns)-2):
df['Index'] = np.where(df.iloc[:, 1] < 0.9 * df.iloc[:, i + 1], 'Low', 'Ok')

function(df)

输出:

char  Age  Age1  Age2  Age3  Age4  Age5 Index
0    A   20    29    60    60    60    18    Ok
1    B   21    27    48    48    48    19    Ok
2    C   19    25    55    55    55    17    Ok
3    D   18    26    62    62    62    12    Ok

如果我将其中一个Age值更改为 1,以便Age[i+1]列超过 90%,则结果是

char  Age  Age1  Age2  Age3  Age4  Age5 Index
0    A    1    29    60    60    60    18   Low
1    B   21    27    48    48    48    19    Ok
2    C   19    25    55    55    55    17    Ok
3    D   18    26    62    62    62    12    Ok

我不太确定您的问题背后的逻辑,但如果有很多列,您可以考虑使用类似的东西

import pandas as pd
df = pd.DataFrame({'char':['A', 'B', 'C', 'D'],
'Age':[20, 21, 19, 18],
'Age1':[29, 27, 25, 26],
'Age2':[60, 48, 55, 62], 
'Age3':[60, 48, 55, 62],
'Age4':[60, 48, 55, 62],
'Age5':[18, 19, 17, 12]})
cols2compare = df.columns[df.columns.str.startswith("Age")]
diz = {True:"Ok", False:"Low"}
df["Index"] = df[cols2compare].apply(lambda x: x["Age"] < x.max()*.9, 
axis=1).map(diz)

最新更新