如何依据数组第二列的0/1标记计算结果并存入数组c?
解决根据数组第二列值生成目标数组c的问题
我来帮你搞定这个需求!先明确一下你的核心要求:
- 遍历输入数组的每一行
- 如果该行第二列是
'0',就在c里存0 - 如果是
'1',就把固定计算值185.244324 / 187.300232(约等于0.989024)存入c
先看看你原来代码里的几个小问题:
- 变量
n的初始化和自增逻辑有点混乱,容易导致索引越界,其实完全不需要这个变量来控制遍历 - 你用了类似DataFrame的切片写法(
df2[n:n+1,1:3]),但你的输入是numpy数组,而且判断条件应该针对当前行的第二列单个值,不是切片对比 - 代码里的
b没有定义,应该是你输入数组的变量名吧?
下面给你两种可行的实现方式,按需选择:
方法一:基础Python循环(适合理解逻辑)
这个写法直白,新手也能快速看懂:
import numpy as np # 你的输入数组 input_arr = np.array([[187.300232, '0'], [185.244324, '1'], [185.427719, '0'], [186.923798, '0'], [182.26181, '1'], [185.253952, '1'], [181.277283, '0'], [181.518585, '0'], [179.192429, '0'], [180.19624299999998, '1'], [183.89300500000002, '1'], [181.11319, '1'], [183.584122, '0'],]) # 预先算好固定值,避免重复计算 fixed_result = 185.244324 / 187.300232 c = [] # 直接遍历数组的每一行 for row in input_arr: # 取当前行的第二列值 flag = row[1] if flag == '1': c.append(fixed_result) else: c.append(0) print(c)
方法二:numpy向量化操作(高效处理大数据)
如果你的数组很大,用numpy的向量化操作会比循环快很多:
import numpy as np input_arr = np.array([[187.300232, '0'], [185.244324, '1'], [185.427719, '0'], [186.923798, '0'], [182.26181, '1'], [185.253952, '1'], [181.277283, '0'], [181.518585, '0'], [179.192429, '0'], [180.19624299999998, '1'], [183.89300500000002, '1'], [181.11319, '1'], [183.584122, '0'],]) fixed_result = 185.244324 / 187.300232 # 生成一个布尔数组,标记哪些行的第二列是'1' mask = input_arr[:, 1] == '1' # 先创建全0数组 c = np.zeros(len(input_arr)) # 把标记为True的位置替换成固定计算值 c[mask] = fixed_result # 如果需要转换成普通列表,加这一步 c_list = c.tolist() print(c_list)
原代码的问题解析
- 你用了
df2这个变量,但看起来你的输入是numpy数组,不是pandas DataFrame,所以切片写法不太对 n的使用完全没必要,循环遍历每一行就可以直接处理,不需要手动控制索引- 判断条件
df2[n:n+1,1:3] == 1错误,因为第二列的值是字符串'1',不是整数1,而且切片得到的是一个子数组,不是单个值
这样修改后就能完美符合你的需求啦!
内容的提问来源于stack exchange,提问作者jjlin
相关产品推荐
相关产品推荐

