Python Pandas DataFrame:如何将数字列转换为成对的分类数据?
给定一个数据帧,如何转换多个数字列(其中x≠1表示值存在,x=0表示它不存在)到成对的分类数据帧中?我知道这类似于一个热解码,但列并不完全是一个热解码 例如: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
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]})