简体   繁体   English

使用多个 If 语句对多列进行 Python Dataframe 逻辑操作

[英]Python Dataframe Logical Operations on Multiple Columns using Multiple If statements

I have a big data frame with float values.我有一个带有浮点值的大数据框。 I want to perform two if logical operations.我想执行两个 if 逻辑运算。

My code:我的代码:

df = 
      A     B
0  78.2  98.2
1  54.0  58.0
2  45.0  49.0
3  20.0  10.0

# I want to compare each column data with predefined limits and assign a rank.
# For A col, Give rank 1 if > 70, 2 if 70< > 40, 3 if < 40
# For B col, Give rank 1 if > 80, 2 if 80< > 45, 3 if < 45

# perform the logical operation
df['A_op','B_op'] = pd.cut(df, bins=[[np.NINF, 40, 70, np.inf],[np.NINF, 45, 80, np.inf]], labels=[[3, 2, 1],[3, 2, 1]])

Present output:当前输出:

ValueError: Input array must be 1 dimensional

Expected output:预期输出:

df = 
      A     B   A_op   B_op
0  78.2  98.2    1    1
1  54.0  58.0    2    2
2  45.0  49.0    2    2
3  20.0  10.0    3    3

It doesn't look like you need to use pd.cut for this.看起来您不需要为此使用pd.cut You can simply use np.select :您可以简单地使用np.select

df["A_op"] = np.select([df["A"]>70, df["A"]<40],[1,3], 2)
df["B_op"] = np.select([df["B"]>80, df["B"]<45],[1,3], 2)

print (df)

      A     B  A_op  B_op
0  78.2  98.2     1     1
1  54.0  58.0     2     2
2  45.0  49.0     2     2
3  20.0  10.0     3     3

After a series of trials, I found the direct answer from the select method.经过一系列的试验,我从select方法中找到了直接的答案。

My answer:我的答案:

rankdf = pd.DataFrame({'Ah':[70],'Al':[40],'Bh':[80],'Bl':[45]})
hcols = ['Ah','Bh']
lcols = ['Al','Bl']

# input columns
ip_cols = ['A','B']

#create empty op columns in df
op_cols = ['A_op','B_op']
df = pd.concat([df,pd.DataFrame(columns=op_cols)])

# logic operation
df[op_cols] = np.select([df[ip_cols ]>rankdf[hcols].values, df[ip_cols]<rankdf[lcols].values],[1,3],2)

Present output:当前输出:

      A     B  A_op  B_op
0  78.2  98.2     1     1
1  54.0  58.0     2     3
2  45.0  49.0     2     3
3  20.0  10.0     3     3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM