如何使用熊猫进行此操作?
初始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
我将执行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
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
假设这些是整数,可以使用cumsum()两次来隔离第一次出现的1。
df2 = (df.cumsum() >0).cumsum() ==1
df['Param'] = df2.sum(axis=1)
print(df)
如果df元素是字符串,则应首先将它们转换为整数。
df = df.astype(int)