Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将a=1000000000转换为十进制数字0B=0100000000转换为十进制数字1,依此类推9个数字_Python_Python 3.x_Pandas - Fatal编程技术网

Python 如何将a=1000000000转换为十进制数字0B=0100000000转换为十进制数字1,依此类推9个数字

Python 如何将a=1000000000转换为十进制数字0B=0100000000转换为十进制数字1,依此类推9个数字,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个包含10列和3000行的数据集。每个列都包含一个0或1。连接在一起的十列表示一个标签。共有10个标签,分别为0,1,2,3,4,5,6,7,8,9。像“100000000”这样的串联序列表示标签0,“0100000000”表示标签1(数字1),“0000000001”表示标签9 将这些序列转换为标签并将其作为第十一列添加到数据集中的最佳/高效代码是什么 for循环 lambda函数 掩蔽 二进制与运算 我很困惑,目前我正试图编写一个lambda函数来实现这一点,但却一事无成 target

我有一个包含10列和3000行的数据集。每个列都包含一个0或1。连接在一起的十列表示一个标签。共有10个标签,分别为0,1,2,3,4,5,6,7,8,9。像“100000000”这样的串联序列表示标签0,“0100000000”表示标签1(数字1),“0000000001”表示标签9

将这些序列转换为标签并将其作为第十一列添加到数据集中的最佳/高效代码是什么

  • for循环
  • lambda函数
  • 掩蔽
  • 二进制与运算
  • 我很困惑,目前我正试图编写一个lambda函数来实现这一点,但却一事无成

    target1 = target.apply(lambda x: [print(x)  for j in range(10) for i in x], axis = 1)
    
    我想知道应该使用哪种方法来实现这种模式匹配

    初始数据帧

    data = [[1,0,0,0,0,0,0,0,0,0],
            [0,1,0,0,0,0,0,0,0,0],
            [0,0,1,0,0,0,0,0,0,0],
            [0,0,0,1,0,0,0,0,0,0],
            [0,0,0,0,1,0,0,0,0,0],
            [0,0,0,0,0,1,0,0,0,0],
            [0,0,0,0,0,0,1,0,0,0],
            [0,0,0,0,0,0,0,1,0,0],
            [0,0,0,0,0,0,0,0,1,0],
            [0,0,0,0,0,0,0,0,0,1]]
    df = pd.DataFrame(data)
    
    带有第十一列名称标签的最终数据

    [dataframe][label]
    1000000000  0   
    0100000000  1  
    0010000000  2  
    0001000000  3  
    0000100000  4  
    0000010000  5  
    0000001000  6  
    0000000100  7  
    0000000010  8  
    0000000001  9  
    
    您正在有效地查找具有最大值的列索引,因此您可以使用轴=1来应用于每行的值:

    df['label'] = df.idxmax(axis=1)
    
    请注意,如果您有10个数字列以外的其他列,则首先只需选择10个数字列;e、 g.
    df.iloc[:,范围(10)].idxmax(…)

    演示:


    起初,我提倡通过
    Dataframe.apply()
    使用
    Series.idxmax()
    ,但在一条现已删除的评论中,Jezrael提醒我,
    Dataframe.idxmax()
    也存在,并且在这里更实用。

    1.让我们生成一个示例 因此,我们得到:

        0  1  2  3  4  5  6  7  8  9
    0   0  0  0  0  0  0  1  0  0  0
    1   0  0  0  0  0  1  0  0  0  0
    2   0  0  0  0  0  0  0  0  0  1
    3   0  0  1  0  0  0  0  0  0  0
    4   0  0  0  1  0  0  0  0  0  0
    5   0  0  0  0  0  1  0  0  0  0
    6   0  0  0  0  0  0  0  0  0  1
    7   0  1  0  0  0  0  0  0  0  0
    8   1  0  0  0  0  0  0  0  0  0
    9   0  1  0  0  0  0  0  0  0  0
    10  0  0  0  0  0  0  0  0  1  0
    11  1  0  0  0  0  0  0  0  0  0
    12  0  0  0  1  0  0  0  0  0  0
    13  0  0  0  0  0  0  0  0  1  0
    14  0  0  1  0  0  0  0  0  0  0
    15  0  0  0  0  0  0  0  1  0  0
    16  0  0  0  0  1  0  0  0  0  0
    17  0  0  0  0  1  0  0  0  0  0
    18  0  0  0  0  0  0  0  1  0  0
    19  0  0  0  0  0  0  1  0  0  0
    
    [6 5 9 2 3 5 9 1 0 1 8 0 3 8 2 7 4 4 7 6]
    
    [0 0 0 0 0 0 1 0 0 0]
    [0 0 0 0 0 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 1]
    [0 0 1 0 0 0 0 0 0 0]
    [0 0 0 1 0 0 0 0 0 0]
    [0 0 0 0 0 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 1]
    [0 1 0 0 0 0 0 0 0 0]
    [1 0 0 0 0 0 0 0 0 0]
    [0 1 0 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 0 1 0]
    [1 0 0 0 0 0 0 0 0 0]
    [0 0 0 1 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 0 1 0]
    [0 0 1 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 0 0]
    [0 0 0 0 1 0 0 0 0 0]
    [0 0 0 0 1 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 0 0]
    [0 0 0 0 0 0 1 0 0 0]
    
    2.标记是矩阵向量乘法 因此,我们得到:

        0  1  2  3  4  5  6  7  8  9
    0   0  0  0  0  0  0  1  0  0  0
    1   0  0  0  0  0  1  0  0  0  0
    2   0  0  0  0  0  0  0  0  0  1
    3   0  0  1  0  0  0  0  0  0  0
    4   0  0  0  1  0  0  0  0  0  0
    5   0  0  0  0  0  1  0  0  0  0
    6   0  0  0  0  0  0  0  0  0  1
    7   0  1  0  0  0  0  0  0  0  0
    8   1  0  0  0  0  0  0  0  0  0
    9   0  1  0  0  0  0  0  0  0  0
    10  0  0  0  0  0  0  0  0  1  0
    11  1  0  0  0  0  0  0  0  0  0
    12  0  0  0  1  0  0  0  0  0  0
    13  0  0  0  0  0  0  0  0  1  0
    14  0  0  1  0  0  0  0  0  0  0
    15  0  0  0  0  0  0  0  1  0  0
    16  0  0  0  0  1  0  0  0  0  0
    17  0  0  0  0  1  0  0  0  0  0
    18  0  0  0  0  0  0  0  1  0  0
    19  0  0  0  0  0  0  1  0  0  0
    
    [6 5 9 2 3 5 9 1 0 1 8 0 3 8 2 7 4 4 7 6]
    
    [0 0 0 0 0 0 1 0 0 0]
    [0 0 0 0 0 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 1]
    [0 0 1 0 0 0 0 0 0 0]
    [0 0 0 1 0 0 0 0 0 0]
    [0 0 0 0 0 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 1]
    [0 1 0 0 0 0 0 0 0 0]
    [1 0 0 0 0 0 0 0 0 0]
    [0 1 0 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 0 1 0]
    [1 0 0 0 0 0 0 0 0 0]
    [0 0 0 1 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 0 1 0]
    [0 0 1 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 0 0]
    [0 0 0 0 1 0 0 0 0 0]
    [0 0 0 0 1 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 0 0]
    [0 0 0 0 0 0 1 0 0 0]
    
    3.每行都可以转换为字符串 因此,我们得到:

        0  1  2  3  4  5  6  7  8  9
    0   0  0  0  0  0  0  1  0  0  0
    1   0  0  0  0  0  1  0  0  0  0
    2   0  0  0  0  0  0  0  0  0  1
    3   0  0  1  0  0  0  0  0  0  0
    4   0  0  0  1  0  0  0  0  0  0
    5   0  0  0  0  0  1  0  0  0  0
    6   0  0  0  0  0  0  0  0  0  1
    7   0  1  0  0  0  0  0  0  0  0
    8   1  0  0  0  0  0  0  0  0  0
    9   0  1  0  0  0  0  0  0  0  0
    10  0  0  0  0  0  0  0  0  1  0
    11  1  0  0  0  0  0  0  0  0  0
    12  0  0  0  1  0  0  0  0  0  0
    13  0  0  0  0  0  0  0  0  1  0
    14  0  0  1  0  0  0  0  0  0  0
    15  0  0  0  0  0  0  0  1  0  0
    16  0  0  0  0  1  0  0  0  0  0
    17  0  0  0  0  1  0  0  0  0  0
    18  0  0  0  0  0  0  0  1  0  0
    19  0  0  0  0  0  0  1  0  0  0
    
    [6 5 9 2 3 5 9 1 0 1 8 0 3 8 2 7 4 4 7 6]
    
    [0 0 0 0 0 0 1 0 0 0]
    [0 0 0 0 0 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 1]
    [0 0 1 0 0 0 0 0 0 0]
    [0 0 0 1 0 0 0 0 0 0]
    [0 0 0 0 0 1 0 0 0 0]
    [0 0 0 0 0 0 0 0 0 1]
    [0 1 0 0 0 0 0 0 0 0]
    [1 0 0 0 0 0 0 0 0 0]
    [0 1 0 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 0 1 0]
    [1 0 0 0 0 0 0 0 0 0]
    [0 0 0 1 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 0 1 0]
    [0 0 1 0 0 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 0 0]
    [0 0 0 0 1 0 0 0 0 0]
    [0 0 0 0 1 0 0 0 0 0]
    [0 0 0 0 0 0 0 1 0 0]
    [0 0 0 0 0 0 1 0 0 0]
    
    从这里您可以继续:-)


    注:第2点。(矩阵乘法)是有效的,第3点。(for loop)效率不高,因此您可以改进此步骤。

    是否有任何此类列的值中包含多个
    1
    ?您能否在此提供示例数据帧和预期输出?我现在对您实际拥有的列数据感到困惑。如果您有10个单独的列而不是一列,那么这与一列包含10位数字的字符串(9
    '0'
    字符和1
    '1'
    字符)是不同的。所有10列只包含0或1。是的,有十个单独的列,每个列只有0或1。那么这些是列的名称,还是列的值?如果这些是值,那么这些列的数据类型是什么?在给定的行上,是否只有一列中有1?如果在您的问题中有一个具体的示例,创建简单数据框的代码,以及您的预期输出,这一切都会容易得多。那么这些是列的名称还是列的值呢?=>这些是col值。列的数据类型为整数。是的,在任何给定值中只有一列带有1row@jezrael:当然,该方法也可以在数据帧上使用。我应该找的。我想知道哪个更快
    df.idxmax(axis=1)
    还是矩阵乘法(见下文)。有人应该
    %timeit
    …-)