2016-09-02 89 views
4

我是python的新手。我有一个数据帧,看起来像这样:for循环提取大熊猫数据帧的标头

A B C D E 
0 1 0 1 0 1 
1 0 1 0 0 1 
2 0 1 1 1 0 
3 1 0 0 1 0 
4 1 0 0 1 1 

我如何写一个for循环来收集列名的每一行。我期望我的结果集如下所示:

A B C D E Result 
0 1 0 1 0 1 ACE 
1 0 1 0 0 1 BE 
2 0 1 1 1 0 BCD 
3 1 0 0 1 0 AD 
4 1 0 0 1 1 ADE 

任何人都可以帮助我吗?谢谢!

回答

9

dot功能为目的而进行的,只要你想你的矩阵和列名的矢量之间的矩阵点积:

df.dot(df.columns) 
Out[5]: 
0 ACE 
1  BE 
2 BCD 
3  AD 
4 ADE 

如果你的数据帧是数字,则先通过测试获得布尔矩阵您df反对0:

(df!=0).dot(df.columns) 

PS:结果就分配到新列

df['Result'] = df.dot(df.columns) 

df 
Out[7]: 
    A B C D E Result 
0 1 0 1 0 1 ACE 
1 0 1 0 0 1  BE 
2 0 1 1 1 0 BCD 
3 1 0 0 1 0  AD 
4 1 0 0 1 1 ADE 
+0

这太好了:-) – piRSquared

+0

@piRSquared谢谢:-) – Boud

+0

@zihan。隐藏在视图中的是布尔索引eval。这只适用于你的矩阵值是0和1的情况。 – Merlin