python中的嵌套if公式
我试图在pandas中执行一个嵌套的if(连同AND&OR函数),我有以下两个数据帧python中的嵌套if公式,python,excel,pandas,numpy,if-statement,Python,Excel,Pandas,Numpy,If Statement,我试图在pandas中执行一个嵌套的if(连同AND&OR函数),我有以下两个数据帧 dF1 TR_ID C_ID Code Check1 Check2 1 101 P1 N Y 2 102 P2 Y Y 3 103 P3 N Y 4 104 P4 Y N 5 105 P5 N N 6 106 P6
dF1
TR_ID C_ID Code Check1 Check2
1 101 P1 N Y
2 102 P2 Y Y
3 103 P3 N Y
4 104 P4 Y N
5 105 P5 N N
6 106 P6 Y Y
7 107 P7 N N
8 108 P8 N N
9 109 P9 Y Y
10 110 P10 Y N
dF2
C_ID CC
101 A1
102 A2
103 A3
104 A4
105 A5
106 A6
107 A7
108 A8
109 A9
110 A10
我正在尝试使用下面的excel公式在Df1
中创建一个新的列“Result”,我对Python的编码相当陌生
Excel公式=
IF(AND(OR($D2="P2",$D2="P4",$D2="P6",$D2="P9"),$E2="Y",$F2="Y"),"A11",VLOOKUP($C2,$J$2:$K$11,2,0))'
生成的数据帧应该如下所示
TR_ID C_ID Code Check1 Check2 RESULT
1 101 P1 N Y A1
2 102 P2 Y Y A11
3 103 P3 N Y A3
4 104 P4 Y N A4
5 105 P5 N N A5
6 106 P6 Y Y A11
7 107 P7 N N A7
8 108 P8 N N A8
9 109 P9 Y Y A11
10 110 P10 Y N A10
我正在pythondf1['CC']=df1['code']中尝试这段代码。apply(lambda x'A11'如果x in('P2','P4','P6','P9')或者'N')
但是,我无法将check1和Check2标准结合起来,否则,vlookup
也不起作用
非常感谢您的任何建议尝试以下方法:
# This is the first part of your IF statement
cond = (
df1['Code'].isin(['P2', 'P4', 'P6', 'P9'])
& df1['Check1'].eq('Y')
& df1['Check2'].eq('Y')
)
# And the VLOOKUP
# (but don't name your dataframe `vlookup` in production code please
vlookup = df1[['C_ID']].merge(df2, on='C_ID')
# Combining the two
df1['RESULT'] = np.where(cond, 'All', vlookup['CC'])
试试这个:
# This is the first part of your IF statement
cond = (
df1['Code'].isin(['P2', 'P4', 'P6', 'P9'])
& df1['Check1'].eq('Y')
& df1['Check2'].eq('Y')
)
# And the VLOOKUP
# (but don't name your dataframe `vlookup` in production code please
vlookup = df1[['C_ID']].merge(df2, on='C_ID')
# Combining the two
df1['RESULT'] = np.where(cond, 'All', vlookup['CC'])
与不将工作表或单元格区域视为数据集对象的Excel不同,Pandas允许您与具有命名列和属性的数据交互
因此,考虑使用后面的条件逻辑,如与<代码>类似的计算,如公式。另外,
~
运算符将逻辑条件取反
p_list = ['P2', 'P4', 'P6', 'P9']
final_df = dF1.merge(dF2, on = "C_ID")
final_df['Result'] = final_df['CC'].where(~((final_df['Code'].isin(p_list))
& (final_df['Check1'] == 'Y')
& (final_df['Check2'] == 'Y')
), 'A11')
print(final_df)
# TR_ID C_ID Code Check1 Check2 CC Result
# 0 1 101 P1 N Y A1 A1
# 1 2 102 P2 Y Y A2 A11
# 2 3 103 P3 N Y A3 A3
# 3 4 104 P4 Y N A4 A4
# 4 5 105 P5 N N A5 A5
# 5 6 106 P6 Y Y A6 A11
# 6 7 107 P7 N N A7 A7
# 7 8 108 P8 N N A8 A8
# 8 9 109 P9 Y Y A9 A11
# 9 10 110 P10 Y N A10 A10
(单击顶部的运行)与Excel不将工作表或单元格区域视为数据集对象不同,Pandas允许您与具有命名列和属性的数据交互
因此,考虑使用后面的条件逻辑,如与<代码>类似的计算,如公式。另外,
~
运算符将逻辑条件取反
p_list = ['P2', 'P4', 'P6', 'P9']
final_df = dF1.merge(dF2, on = "C_ID")
final_df['Result'] = final_df['CC'].where(~((final_df['Code'].isin(p_list))
& (final_df['Check1'] == 'Y')
& (final_df['Check2'] == 'Y')
), 'A11')
print(final_df)
# TR_ID C_ID Code Check1 Check2 CC Result
# 0 1 101 P1 N Y A1 A1
# 1 2 102 P2 Y Y A2 A11
# 2 3 103 P3 N Y A3 A3
# 3 4 104 P4 Y N A4 A4
# 4 5 105 P5 N N A5 A5
# 5 6 106 P6 Y Y A6 A11
# 6 7 107 P7 N N A7 A7
# 7 8 108 P8 N N A8 A8
# 8 9 109 P9 Y Y A9 A11
# 9 10 110 P10 Y N A10 A10
(单击顶部的运行)请详细解释支票1和支票2的作用。更清楚地说明条件是什么,并假设回答者是一个noob,当涉及到检查1和检查2时,请详细解释检查1和检查2的作用。更清楚地说明条件是什么,假设回答者是一个noob,当谈到excel时非常感谢你,这更合理,非常感谢你,这更合理,谢谢你,这是greatThank你,这很好