python - Pandas 数据框 : How to convert numeric columns into pairwise categorical data?

标签 python pandas dataframe binary dummy-variable

给定一个 pandas 数据框,如何将多个数字列(其中 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

结果是: 去向 身份证匹配

 result 
0  A
0  D 
1  A
1  B
2  A
2  B
2  C
3  D
5  B

最佳答案

使用DataFrame.stack带过滤和 Index.to_frame :

s = df.stack()

df = s[s!=0].index.to_frame(index=False).rename(columns={1:'result'})
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

或者如果性能很重要,请使用 numpy.where通过 DataFrame 构造函数匹配值的索引:

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]})

关于python - Pandas 数据框 : How to convert numeric columns into pairwise categorical data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55257650/

相关文章:

python - sklearn python中样本数量不一致

python - 读取数据时无法预先定义dtype

python - Pandas - 在 group by 后减去 2 个变量

python - 在 Pandas 数据框中查找列和索引

python - 误差条图的 Matplotlib set_data

python - 我正在尝试使用 numpy.interp 从 pandas 数据帧插入值,但它不断返回错误的插值

python - .NET API 的 cPython

python - Django 重复条目 1062

java - 使用 Apache Spark (Java) 将 CSV 数据加载到 Dataframe 并转换为数组

python - 比单个列一次跨数据框剥离空间的优雅方式