提问者:小点点

将指标编号转换为二进制值


如果有两个数据帧(pandas.dataframe),每个数据帧如下所示。 让我们把第一个称为df_A

    code1   code2   code3   code4   code5   
0   1       4       2       0       0 
1   3       2       1       5       0   
2   2       3       0       0       0   

    has1    has2    has3    has4    has5
0   1       1       0       1       0              
1   1       1       0       0       1 
2   0       1       1       0       0
    

每个对象(行)最多给出5个代码,由第一个DF中的5个列示出来。相反,我想要每个对象所具有的wich代码的二进制表示。 如第二份DF所示。 pandas或scikit-learn中的函数会考虑代码的位置,这并不重要。

由于我在python和Pandas方面的经验不足,我用自己的代码进行的尝试都没有奏效。

这个例子不同于我在堆栈溢出上看到的其他例子,因为所有的列都代表相同的东西。

谢谢!

编辑:


for colname in df_bin.columns:
    for row in range(len(df_codes)):
        if int(colname) in df_codes.iloc[[row]]:
            df_bin[colname][row]=1
        
this is one of the attempts i have made so far.

共2个答案

匿名用户

您可以尝试stack然后str.get_dummies

s=df.stack().loc[lambda x : x!=0].astype(str).str.get_dummies().sum(level=0).add_prefix('Has')
   Has1  Has2  Has3  Has4  Has5
0     1     1     0     1     0
1     1     1     1     0     1
2     0     1     1     0     0

匿名用户

让我们试试:

(df.stack().groupby(level=0)
   .value_counts()
   .unstack(fill_value=0)
   [range(1,6)]
   .add_prefix('has')
)

输出:

   has1  has2  has3  has4  has5
0     1     1     0     1     0
1     1     1     1     0     1
2     0     1     1     0     0