Python Pandas:如何比较单元格和两列的值,并可能使用 If...Else 语句创建具有新值的另一列

Python Pandas: How to compare values of cells and two columns and maybe using If...Else statement to create another column with new values

我正在尝试和研究如何做到这一点,但我无法将 pandas 与 if, else 混合使用 and/or 通过索引获取值并将其与 if, else 进行比较并用 codes/values 分配一列。 说明:我下面有这个table,我想比较ID列的单元格,如果后单元格的值等于前一个单元格的值AND 如果在 COD 列中后单元等于前一个单元,THEN 结果列 = "否" , 否则 "pass" 如果两者都不是 "unknown"

这是我在 excel 中制作的公式:=IF(B3=B2,IF(C3=C2,"NO","PASS"),"UNKNOWN").

下面我也贴出了一些代码尝试。我什至可以用第一个测试(来自 ID 列单元格)和第二个测试(来自 COD 列单元格)和布尔结果 return 创建两列,但我无法得到 If, Else 到将它们连接在一起并在另一列中生成我想要的值。 如果有人能帮助我,我会很感激吗?

df = df.sort_values(by=['ID'])
df['matchesID'] = df['ID'].shift(1) == df['ID']
df['matchesCod']= df['Cod'].shift(1) == df['Cod']

df = df.sort_values(by=['ID'])
test = (df['SWENo'].shift(1) == df['SWENo']) & (df['Cod'].shift(1) == df['Cod'])

我正在尝试下面这样的事情

if df['ID'].shift(1) == df['ID'] and df['Cod'].shift(1) == df['Cod']:
    listProg.append('not')
elif df['ID'].shift(1) == df['ID'] and df['Cod'].shift(1) != df['Cod']:
    listProg.append('pass')
else:
    listProg.append('Unknown')

但结果是:“ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any () 或 a.all()".

如果你能帮我,我很感激,它可以与pandas或不混合。我只需要它工作。谢谢大家。

pandas 中的类似方法是使用 numpy.where 函数。

使用此代码:

import numpy as np

df['Result'] = np.where(df['ID'] == df['ID'].shift(), np.where(df['Cod'] == df['Cod'].shift(), 'NO', 'PASS'), 'UNKNOWN')

我得到以下结果:

   ID  Cod   Result
0   1    1  UNKNOWN
1   2    1  UNKNOWN
2   2    1       NO
3   3    1  UNKNOWN
4   4    1  UNKNOWN
5   4    2     PASS
6   4    2       NO
7   5    1  UNKNOWN
8   6    1  UNKNOWN

这似乎更符合您对如何导出结果值的描述。