【问题标题】:for loop to extract header for a dataframe in pandasfor循环提取熊猫数据帧的标头
【发布时间】:2017-01-11 01:25:32
【问题描述】:

我是python的新手。我有一个如下所示的数据框:

    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

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

【问题讨论】:

    标签: python pandas for-loop


    【解决方案1】:

    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
    

    【讨论】:

    • @zihan。隐藏在视图中的是布尔索引评估。这只有效,因为您的矩阵值是 0 和 1。
    • 感谢您帮助我回答我的问题,但出现错误 >TypeError: can't multiply sequence by non-int of type 'float'
    • @Merlin 确定:使用整数 n>1 你会得到 n 倍的值。 numpy behind 实现了 python 逻辑,因此您将 n * 'column title' 相乘。这符合 OP 的矩阵形式
    • @Merlin 添加了一行来解释如何将浮点矩阵快速转换为布尔矩阵。
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2020-04-10
    • 2018-08-20
    • 1970-01-01
    • 2021-12-22
    • 2018-01-22
    相关资源
    最近更新 更多