繁体   English   中英

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 和/或按索引获取值并将其与 if、else 进行比较并分配包含代码/值的列。 说明:我有下面这张表,我想比较ID列中的单元格,如果后单元格的值等于前一个单元格,并且如果在COD列中后单元格等于前一个单元格,结果列 =“否”,否则为“通过” ,如果两者都不是,则为“未知”

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

在此处输入图像描述

下面我也贴出了一些代码尝试。 我什至可以用第一个测试(来自 ID 列单元格)和第二个测试(来自 COD 列单元格)创建两列,并返回 Boolean 结果,但我无法获得 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:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()”。

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

pandas 中的类似方法将使用numpy.where function。

使用此代码:

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

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

暂无
暂无

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

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