如何比较 Pandas 中的两列?
在本文中,我们将学习如何比较 pandas 数据框中的列。 Pandas 是Python中一个非常有用的库,主要用于数据分析、可视化、数据清洗等。
当我们想要比较它们之间的值或者我们想知道它们之间的相似性时,比较列是非常必要的。例如,如果我们取两列,并且我们想找出哪一列大于或小于另一列,或者还想找出它们之间的相似性,那么比较列是我们可能需要做的合适的事情。 pandas 和 NumPy 中有很多种方法可以比较它们之间的值,我们将在本文中看到所有方法和实现。
方法 1:使用 np.where() 方法。
在这个方法中,条件被传递给这个方法,如果条件为真,那么它将是我们给的值(即语法中的'X)如果它是假的,那么它将是我们给他们的值(即语法中的“y”)。
Syntax: numpy.where(condition[,x, y])
Parameters:
- condition : When True, yield x, otherwise yield y.
- x, y : Values from which to choose.
在下面的代码中,我们正在导入必要的库,即 pandas 和 NumPy。我们创建了一个字典,并给出了每一列的值。然后将其转换为 pandas 数据框。通过使用 NumPy 中的 Where() 方法,我们得到了比较列的条件。如果'column1'小于'column2'并且'column1'小于'column3',我们打印'column1'的值。如果条件失败,我们将值设为“NaN”。这些结果存储在数据框中的新列中。
Python3
# Importing Libraries
import pandas as pd
import numpy as np
# data's stored in dictionary
details = {
'Column1': [1, 2, 30, 4],
'Column2': [7, 4, 25, 9],
'Column3': [3, 8, 10, 30]
}
# creating a Dataframe object
df = pd.DataFrame(details)
# Where method to compare the values
# The values were stored in the new column
df['new'] = np.where((df['Column1'] <= df['Column2']) & (
df['Column1'] <= df['Column3']), df['Column1'], np.nan)
# printing the dataframe
print(df)
Python3
# importing libraries
import pandas as pd
# Storing data in dictionary
details = {
'Column1': [1, 2, 3, 4],
'Column2': [7, 4, 25, 9],
'Column3': [3, 8, 10, 30],
'Column4': [7, 4, 25, 9],
}
# creating a Dataframe object
df = pd.DataFrame(details)
df['Column4'].equals(df['Column2']) # Returns True
# df['Column1'].equals(df['Column2']) Returns False
Python3
import pandas as pd
details = {
'Column1': [1, 2, 3, 4],
'Column2': [7, 4, 2, 9],
'Column3': [3, 8, 10, 30],
}
# creating a Dataframe object
df = pd.DataFrame(details)
# apply function
df['New'] = df.apply(lambda x: x['Column1'] if x['Column1'] <=
x['Column2'] and x['Column1']
<= x['Column3'] else np.nan, axis=1)
# printing the dataframe
print(df)
输出:
方法 2:使用 equals() 方法。
此方法测试两列是否包含相同的元素。此函数允许将两个 Series 或 DataFrame 相互比较,以查看它们是否具有相同的形状和元素。同一位置的 NaN 被认为是相等的。
Syntax: DataFrame.equals(other)
Parameters: OtherSeries or DataFrame: The other Series or DataFrame to be compared with the first.
Returns: bool True if all elements are the same in both objects, False otherwise
在下面的代码中,我们遵循相同的过程,即导入库和创建数据框。在此数据框中,我添加了一个等于“column2”的新列,以显示该方法在此数据框中的作用。
Python3
# importing libraries
import pandas as pd
# Storing data in dictionary
details = {
'Column1': [1, 2, 3, 4],
'Column2': [7, 4, 25, 9],
'Column3': [3, 8, 10, 30],
'Column4': [7, 4, 25, 9],
}
# creating a Dataframe object
df = pd.DataFrame(details)
df['Column4'].equals(df['Column2']) # Returns True
# df['Column1'].equals(df['Column2']) Returns False
输出:
True
方法 3:使用 Apply() 方法。
此方法允许我们传递函数或条件,并在 pandas 的数据框系列中应用相同的函数。这种方法节省了我们的时间和代码。
Syntax: DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
在下面的代码中,我们重复相同的过程在 pandas 中创建一个数据框。通过使用 apply() 方法,我们正在使用 lambda 在 apply() 本身中创建一个临时匿名函数。它检查“column1”是否小于“column2”和“column1”是否小于“column3”。如果为 True,它将给出 'column1' 值。如果为 False,它将打印 NaN。这些值存储在 New 列中。因此,我们比较了列。
Python3
import pandas as pd
details = {
'Column1': [1, 2, 3, 4],
'Column2': [7, 4, 2, 9],
'Column3': [3, 8, 10, 30],
}
# creating a Dataframe object
df = pd.DataFrame(details)
# apply function
df['New'] = df.apply(lambda x: x['Column1'] if x['Column1'] <=
x['Column2'] and x['Column1']
<= x['Column3'] else np.nan, axis=1)
# printing the dataframe
print(df)
输出: