为了账号安全,请及时绑定邮箱和手机立即绑定

如果数据框行设置为1,其余值设置为0,如何设置最大值

如果数据框行设置为1,其余值设置为0,如何设置最大值

至尊宝的传说 2021-04-02 17:15:47
原始数据框:ix x  y  z    0  3  4  1 1  2  0  62  7  1  03  0  0  0应转换为:ix x  y  z    0  0  1  0 1  0  0  12  1  0  03  0  0  0如您所见,我将每一行的最大值设为1,然后该行中的其他值将等于0。此外,您会注意到该行3保持不变,因为它们都相等到0。因此,我已经能够使用以下方法提取最大值的索引:x.idxmax(axis = 1)但我不知道该如何处理最大索引。我正在考虑使用np.where,但是没有可以使用的条件语句。还是我想。任何帮助将非常感激。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

用:


df.eq(df.where(df != 0).max(1), axis=0).astype(int)

df


      x    y    z

ix               

0   3.0  4.0  1.0

1   2.0  1.0  6.0

2   7.0  1.0  6.0

3   0.0  0.0  0.0

4   4.0  0.0  4.0

输出:


    x  y  z

ix         

0   0  1  0

1   0  0  1

2   1  0  0

3   0  0  0

4   1  0  1

另一种方法使用rank:


df.where(df!=0).rank(1, ascending=False, method='dense').eq(1).astype(int)

输出:


    x  y  z

ix         

0   0  1  0

1   0  0  1

2   1  0  0

3   0  0  0

4   1  0  1


查看完整回答
反对 回复 2021-04-27
?
MYYA

TA贡献1868条经验 获得超4个赞

首先,找到数据框中具有非零行的部分。然后找到最大值并将它们与矩阵进行比较:


affected = (df != 0).any(axis=1)

nz = df[affected]

df[affected] = (nz.T == nz.max(axis=1)).T.astype(int)

#    x  y  z

#0   0  1  0

#1   0  0  1

#2   1  0  0

#3   0  0  0


查看完整回答
反对 回复 2021-04-27
?
慕容3067478

TA贡献1773条经验 获得超3个赞

做到这一点的一种不太雅致的方法是:


(df.T.max() == df.T).T.astype(int)

在这里,我们计算按行的最大值,然后将其与值进行比较(将其设置为True/ False),然后将其转换为ints。


这将产生:


>>> (df.T.max() == df.T).T.astype(int)

   a  b  c

0  0  1  0

1  0  0  1

2  1  0  0

该.T是必要的,因为这将另有计算纵列最大。


或就像@AChampion所说的那样,我们可以使用计算行的最大值,.max(axis=1)然后使用df.eq(..)来计算行的相等性。喜欢:


>>> df.eq(df.max(axis=1), axis=0).astype(int)

   a  b  c

0  0  1  0

1  0  0  1

2  1  0  0

编辑:仅更新非零行


例如,我们可以使用屏蔽来防止将这些值分配给零行。例如:


fl = (df != 0).any(axis=1)

df[fl] = df[fl].eq(df[fl].max(axis=1), axis=0).astype(int)

例如:


>>> df = pd.DataFrame([[3, 4, 1], [2, 1, 6], [7, 1, 6], [0, 0, 0]], columns=["a", "b", "c"])

>>> fl = (df != 0).any(axis=1)

>>> df[fl] = df[fl].eq(df[fl].max(axis=1), axis=0).astype(int)

>>> df

   a  b  c

0  0  1  0

1  0  0  1

2  1  0  0

3  0  0  0


查看完整回答
反对 回复 2021-04-27
  • 3 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号