Pandas 根据其他列的相等性创建布尔列

有没有一种简单的方法来动态(!!!)在数据框中创建一个布尔列,基于其他列的值,通过检查值是否相等?

我的DF:

df = pd.DataFrame({"column_1":[1,2,3,4,5], "column_2":[1,3,2,4,5]})

它应该是什么样子:

|column_1|column_2|columns_equal|
|:-------|--------|------------:|
|     1  |     1  |    True     |
|     2  |     3  |    False    |
|     3  |     2  |    False    |
|     4  |     4  |    True     |
|     5  |     5  |    True     |
stack overflow Pandas create boolean column based on equality of other columns
原文答案
author avatar

接受的答案

对于两列的简单情况,您可以执行以下操作:

df["column_equal"] = df["column_1"] == df["column_2"]

相反,如果您有更多列,这会更好:

df["column_equal"] = df.eq(df["column_1"], axis=0).all(axis=1)

df.eq(df["column_1"]) 将为您提供一个新的数据框,每列中都有一个布尔值,指示该元素是否与 column_1 中的元素相同。然后 .all(axis=1) 只检查每行中的所有元素是否都是 True


答案:

作者头像

有两个非常简单的解决方案:

df['columns_equal'] = df['column_1'].eq(df['column_2'])

或者

df['columns_equal'] = df['column_1'] == df['column_2']

编辑

一个循环可能如下所示:

for i, item in enumerate(df.columns):
    df[i] = df['column_1'].eq(df[item])
作者头像

您可以使用 DataFrame.nuniqueaxis=1 找到每行唯一值的数量,然后使用 Series.eq 检查是否只有一个

df["column_equal"] = df.nunique(axis=1).eq(1)