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

How do I create a column such that its values is count of the number of,1, in that row, which are appearing for the first time in their own column?

如何使用 pandas 执行此操作?

初测:

    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

最终目标:

    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

index 1 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0

C 列中的索引 2 : 1 和 D 首次出现在它们的列中,因此 Paramm1 = 2

index 3 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0

A 列中的索引 4 : 1 首次出现在该列中,因此 Paramm1 = 1

index 5 : 1 的 none 第一次出现在它自己的列中因此 Param1 = 0

您可以检查重复值,乘以 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

我会做 idxmaxvalue_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

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

df2 = (df.cumsum() > 0).cumsum() == 1
df['Param'] = df2.sum(axis = 1)
print(df)

如果df元素是字符串,你应该先把它们转换成整数。

df = df.astype(int)