Python 如何将a=1000000000转换为十进制数字0B=0100000000转换为十进制数字1,依此类推9个数字
我有一个包含10列和3000行的数据集。每个列都包含一个0或1。连接在一起的十列表示一个标签。共有10个标签,分别为0,1,2,3,4,5,6,7,8,9。像“100000000”这样的串联序列表示标签0,“0100000000”表示标签1(数字1),“0000000001”表示标签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
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
…-)