Python 熊猫:如果列不是最大值,则替换为0

Python 熊猫:如果列不是最大值,则替换为0,python,python-3.x,pandas,Python,Python 3.x,Pandas,我要做的是,如果给定行的列不是最大列,则将列值替换为“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 0 1 B 1 0 1 B 2 1 0 A 你可以

我要做的是,如果给定行的列不是最大列,则将列值替换为“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  0  1   B
1  0  1   B
2  1  0   A
你可以做:

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)
                      )

“is maximum”是指在不称为“Max”的列中按行具有最大值,还是指“是否在Max中指定了列”?在第一行中,A=1和B=3,但“Max”是A。啊,我的错,是一个输入错误,
Max
列可能完全不需要
data\u df.eq(data\u df.max(1),axis=0).astype(int)
,特别是如果多列可以共享最大值,而不是我的下一票,但是只有当所有值都出现在
max
中时,你的第二个答案才有效,而且你的第一个方法也不需要一个循环,老实说,现在它更糟糕了。这是一种非常复杂的
np.array方法(['A',B'])==df['Max'].values[:,None]
,这会快得多。我不确定这会有多糟。我确实想到了确切的numpy广播解决方案,但后来我觉得可能太多了。尽管这确实是一个好的解决方案。
data_df[['A', 'B']] = (pd.get_dummies(data_df['Max'])
                       .reindex(['A','B'], axis=1, fill_value=0)
                      )