繁体   English   中英

如何使用python将一列的每个单元格与csv文件中另一列的每个单元格进行比较?

[英]How to compare each cells of one columns to each cells of another column in a csv file with python?

我有一个程序使用 python pandas 库分别对两列求和并与第三列进行比较并给出结果。 它在下面:

import pandas as pd

df = pd.read_csv(r'xl1.csv', skipinitialspace=True, sep=',')
sum1 = df['Gross_Salary'].sum()
sum2 = df['Deduction'].sum()
diff = sum1 - sum2

if diff == df['Net_Salary'].sum():
    print("Pass")
else:
    print("Fail")

它按要求工作。 但是,我的要求是比较两列的每个单元格,减去它们,然后与第三列进行比较。 如果值匹配则“通过”,否则“失败”

以下是 CSV 数据:

Gross_Salary Deduction Net_Salary
100             20         80
2000            200       1500
300             0          300

在第 2 行,故意存在数据不匹配。

我知道我需要使用 for 循环来遍历每一行。 我确实尝试使用如下循环

for i in pd.read_csv(r'xl1.csv', skipinitialspace=True, sep=',')

但是,无法应用除此之外的逻辑。

请帮忙,

谢谢

您可以使用矢量化实现创建一个存储测试结果的新列。 即:

df['Result'] = ((df['Gross_Salary'] - df['Deduction']) == df['Net_Salary']).astype(int)
df['Result'] = df['Result'].map({1: 'Pass', 0: 'Fail'})

或者类似地,如果你也有 numpy 依赖:

df['Result'] = np.where(df['Gross_Salary'] - df['Deduction'] == df['Net_Salary'],
                        'Pass', 'Fail')

熊猫实现

  • df['Gross_Salary'] - df['Deduction']计算两列的元素差异。 请注意,pandas 会自动将具有相同索引的元素对齐。
  • 一旦我们有了差异,我们就使用==运算符将其与df['Net_Salary']进行比较。 这将产生具有布尔值的系列(列)。
  • 我正在转换为int类型,以便True -> 1False -> 0
  • 最后,我使用Series.map对所需的格式进行编码,将 1 映射到Pass并将 0 映射到Fail

Numpy 实现

  • np.where返回第二个(相应的第三个)值,具体取决于条件(第一个参数)是否为 True(相应的 False)。

将其中之一应用于您的示例:

df
    Gross_Salary  Deduction  Net_Salary Result
0           100         20          80   Pass
1          2000        200        1500   Fail
2           300          0         300   Pass

暂无
暂无

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

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