Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的嵌套if公式_Python_Excel_Pandas_Numpy_If Statement - Fatal编程技术网

python中的嵌套if公式

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

我试图在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     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
我正在python
df1['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你,这很好