繁体   English   中英

如何在 Pandas 中将列名转换为值

[英]How to turn columns names into values in Pandas

我想将列名转换为值。 这是为了创建一个因子变量并将水平定义为列名。 我希望从x1达到x2 在 R 中就像使用model.matrix() function

谢谢

x1 = pd.DataFrame({'A': [1,0,0],
            'B': [0,1,0],
            'C': [0,1,1]})

x2 = pd.DataFrame({'All': ['A','BC','C']})

这是一种方式,应该有一个更简单的解决方案:

x1.astype(bool).apply(lambda row: ''.join(x1.columns[row]), axis=1)

使用@ (矩阵乘法运算符)将列向量乘以boolean 矩阵:

import pandas as pd

x1 = pd.DataFrame({'A': [1, 0, 0],
                   'B': [0, 1, 0],
                   'C': [0, 1, 1]})

# create result DataFrame
x2 = pd.DataFrame({"all": x1 @ x1.columns})
print(x2)

Output

  all
0   A
1  BC
2   C

您还可以使用列表理解,如下所示:

cols = x1.columns.values

x2 = pd.DataFrame({'All': [''.join(cols[x]) for x in x1.eq(1).values]})

或者简单地说:

x2 = pd.DataFrame({'All': [''.join(x1.columns[x]) for x in x1.eq(1).values]})

结果:

print(x2)

  All
0   A
1  BC
2   C

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM