![](/img/trans.png)
[英]How can I turn a pandas dataframe with columns with similar names into rows?
[英]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.