如何创建一列,使其值等于该行中第一次出现在其自己列中的数字1,的计数?

问题描述 投票:1回答:3

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

初始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

Basically Param是该行中第一次出现在其自己列中的1的编号。例:索引B中的索引0:1首次出现,因此Param1 = 1

索引1:1都没有出现在其自己的列中,因此Param1 = 0

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

索引3:1都没有出现在其自己的列中,因此Param1 = 0

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

索引5:1都没有出现在其自己的列中,因此Param1 = 0

python pandas dataframe apply series
3个回答
1
投票

我将执行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

1
投票

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

0
投票

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

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

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

df = df.astype(int)
© www.soinside.com 2019 - 2024. All rights reserved.