![](/img/trans.png)
[英]Conditionally format cells in each column based on columns in another dataframe
[英]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 -> 1
和False -> 0
Pass
并将 0 映射到Fail
。Numpy 实现
将其中之一应用于您的示例:
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.