首页 > 解决方案 > Pandas:如果不是最大值,则替换为 0 的列

问题描述

我想要做的是用“0”替换列值,如果对于给定的行,该列不是最大的。相反,如果对于给定的行,该列是最大的,则将列值替换为“1”。

我的数据如下所示:

data = {
    "A": [1, 2, 3],
    "B": [3, 5, 1],
    "Max": ["B", "B", "A"]
}

data_df = pd.DataFrame(data)
print(data_df)
   A  B Max
0  1  3   B
1  2  5   B
2  3  1   A

但我希望它看起来像

   A  B Max
0  0  1   B
1  0  1   B
2  1  0   A

标签: pythonpython-3.xpandas

解决方案


你可以做:

for col in ['A','B']:
    data_df[col] = data_df['Max'].eq(col).astype(int)

或者,您可以这样做:

data_df[['A', 'B']] = (pd.get_dummies(data_df['Max'])
                       .reindex(['A','B'], axis=1, fill_value=0)
                      )

推荐阅读