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

我如何创建一个列,使其值是该行中第一次出现在它们自己的列中的 1 的数量?

我如何创建一个列,使其值是该行中第一次出现在它们自己的列中的 1 的数量?

婷婷同学_ 2022-12-14 21:15:11
我如何使用熊猫进行此操作?初始 Df:    A B C D0   0 1 0 01   0 1 0 02   0 0 1 13   0 1 0 14   1 1 0 05   1 1 1 0最终 Df:    A B C D Param0   0 1 0 0     11   0 1 0 0     02   0 0 1 1     23   0 1 0 1     04   1 1 0 0     15   1 1 1 0     0基本上 Param 是该行中第一次出现在其自己的列中的 1 的编号。示例:B 列中的索引 0 : 1 是第一次出现,因此 Param1 = 1索引 1 :没有一个 1 是第一次出现在它自己的列中,因此 Param1 = 0索引 2 : C 列中的 1 和 D 首次出现在它们的列中,因此 Paramm1 = 2索引 3:没有一个 1 是第一次出现在它自己的列中,因此 Param1 = 0索引 4:A 列中的 1 首次出现在该列中,因此 Paramm1 = 1索引 5:没有一个 1 是第一次出现在它自己的列中,因此 Param1 = 0
查看完整描述

3 回答

?
慕婉清6462132

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

我会做idxmax和value_counts


df['Param']=df.idxmax().value_counts().reindex(df.index,fill_value=0)

df

   A  B  C  D  Param

0  0  1  0  0      1

1  0  1  0  0      0

2  0  0  1  1      2

3  0  1  0  1      0

4  1  1  0  0      1

5  1  1  1  0      0


查看完整回答
反对 回复 2022-12-14
?
茅侃侃

TA贡献1842条经验 获得超22个赞

您可以检查重复值,乘以df和求和:


df['Param'] = df.apply(lambda x: ~x.duplicated()).mul(df).sum(1)

输出:


   A  B  C  D  Param

0  0  1  0  0      1

1  0  1  0  0      0

2  0  0  1  1      2

3  0  1  0  1      0

4  1  1  0  0      1

5  1  1  1  0      0


查看完整回答
反对 回复 2022-12-14
?
月关宝盒

TA贡献1772条经验 获得超5个赞

假设这些是整数,您可以使用 cumsum() 两次来隔离第一次出现的 1。


df2 = (df.cumsum() > 0).cumsum() == 1

df['Param'] = df2.sum(axis = 1)

print(df)

如果 df 元素是字符串,您应该首先将它们转换为整数。


df = df.astype(int)


查看完整回答
反对 回复 2022-12-14
  • 3 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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