Python Pandas DataFrame:如何将数字列转换为成对的分类数据?

Python Pandas DataFrame:如何将数字列转换为成对的分类数据?,python,pandas,dataframe,binary,dummy-variable,Python,Pandas,Dataframe,Binary,Dummy Variable,给定一个数据帧,如何转换多个数字列(其中x≠1表示值存在,x=0表示它不存在)到成对的分类数据帧中?我知道这类似于一个热解码,但列并不完全是一个热解码 例如: df id A B C D 0 3 0 0 1 1 4 1 0 0 2 1 7 20 0 3 0 0 0 4 4 0 0 0 0 5 0 1 0 0 结果将是: df 身份证匹配 result 0 A 0 D 1 A 1 B 2 A 2 B 2 C 3 D 5

给定一个数据帧,如何转换多个数字列(其中x≠1表示值存在,x=0表示它不存在)到成对的分类数据帧中?我知道这类似于一个热解码,但列并不完全是一个热解码

例如:

 df
id A  B  C  D
0  3  0  0  1
1  4  1  0  0
2  1  7  20 0
3  0  0  0  4
4  0  0  0  0
5  0  1  0  0
结果将是: df 身份证匹配

 result 
0  A
0  D 
1  A
1  B
2  A
2  B
2  C
3  D
5  B
与过滤和过滤一起使用:

或者,如果性能很重要,则通过与
数据帧
构造函数匹配的值来使用索引:

i, c = np.where(df != 0)

df = pd.DataFrame({'id':df.index.values[i],
                   'result':df.columns.values[c]})
print (df)
   id result
0   0      A
1   0      D
2   1      A
3   1      B
4   2      A
5   2      B
6   2      C
7   3      D
8   5      B
编辑:

首先:

s = df.stack()

df = s[s!=0].reset_index()
df.columns= ['id','result','vals']
print (df)
   id result  vals
0   0      A     3
1   0      D     1
2   1      A     4
3   1      B     1
4   2      A     1
5   2      B     7
6   2      C    20
7   3      D     4
8   5      B     1
第二:

df = pd.DataFrame({'id':df.index.values[i],
                   'result':df.columns.values[c],
                   'vals':df.values[i,c]})

可能重复的谢谢!你知道如何将值本身添加到一个额外的列中吗?@Codevan-当然,给他们一秒钟。“value”:df_train.iloc[i,c]对于结果df会有所帮助
df = pd.DataFrame({'id':df.index.values[i],
                   'result':df.columns.values[c],
                   'vals':df.values[i,c]})