猿问

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

我如何使用熊猫进行此操作?


初始 Df:


    A B C D

0   0 1 0 0

1   0 1 0 0

2   0 0 1 1

3   0 1 0 1

4   1 1 0 0

5   1 1 1 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

基本上 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


婷婷同学_
浏览 126回答 3
3回答

慕婉清6462132

我会做idxmax和value_countsdf['Param']=df.idxmax().value_counts().reindex(df.index,fill_value=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

茅侃侃

您可以检查重复值,乘以df和求和:df['Param'] = df.apply(lambda x: ~x.duplicated()).mul(df).sum(1)输出:   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

月关宝盒

假设这些是整数,您可以使用 cumsum() 两次来隔离第一次出现的 1。df2 = (df.cumsum() > 0).cumsum() == 1df['Param'] = df2.sum(axis = 1)print(df)如果 df 元素是字符串,您应该首先将它们转换为整数。df = df.astype(int)
随时随地看视频慕课网APP

相关分类

Python
我要回答