我正在尝试将特定列的值与其中一列的值进行比较,并根据它们的比较索引将结果存储到新列中,例如:如果值相差超过 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)