我有一些示例代码如下:import numpy as npimport pandas as pdx = range(1, 12)arr1 = np.random.randint(x)arr2 = np.array(x)arr3 = np.random.randint(x)arr4 = np.random.randint(x)arr5 = np.random.randint(0, 2, 11)dict_df = { 'arr1' : arr1, 'arr2' : arr2, 'arr3' : arr3, 'arr4' : arr4, 'arr5' : arr5}d = pd.DataFrame(dict_df)num_count = 0list_of_num = []for i in d.index: number = d['arr1'][i] for num in d['arr5']: if num == 1: num_count = 1 number = number list_of_num.append(number) elif num == 0: num_count = 0print(list_of_num)我正在尝试构建列表,如果列中的所有列前面arr5都有 -1,则它们都会附加到列表中。我从中收到的输出是:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8]代码的问题是我误用了for循环,这就是为什么列表重复了这么多次的原因。我怎样才能更改代码以使代码不会重复?
1 回答

翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
看来您并不打算嵌套循环。外循环遍历每一行。然后,对于外循环的每次迭代,内循环遍历每一行。要同步移动两列,您可以编写一个循环:
for i in d.index: if d['arr5'][i]: list_of_num.append(d['arr1'][i]) num_count += 1
这当然是非常低效的,并且首先放弃了使用 numpy 或 pandas 的所有好处。您可以使用布尔掩码完成同样的事情。在麻木中:
array_of_num = arr1[arr5.astype(bool)] num_count = array_of_num.size
在熊猫中:
series_of_num = d['arr1'][d['arr5'].astype(bool)] num_count = series_of_num.size
在这两种情况下,您都可以替换.astype(bool)
为!= 0
.
添加回答
举报
0/150
提交
取消