【发布时间】:2020-10-11 19:36:38
【问题描述】:
我知道这个问题被问过几次,但我无法理解答案或将其应用于我的案例。
我正在尝试遍历数据帧,并且对于每一行,如果 A 列有 1,则将 1 添加到计数器,如果它有 0,则不计算计数器中的行(但不要跳过它) . 当计数器达到 10 时,取出所有行并将它们放入一个数组中并重新启动计数器。经过一番搜索,似乎生成器可以解决问题,但我对它们有点麻烦。到目前为止,由于 SO 社区的帮助,我得到了类似的东西!
data = pd.DataFrame(np.random.randint(0,50,size=(50, 4)), columns=list('ABCD'))
data['C'] = np.random.randint(2, size=50)
data
counter = 0
chunk = 10
arrays = []
for x in range(0, len(data), chunk):
array = data.iloc[x: x+chunk]
arrays.append(array)
print(array)
这个想法看起来像这样:
while counter <= 10:
if data['A'] == 1:
counter += 1
yield counter
if counter > 10:
counter = 0
但我不知道如何将此伪代码与我当前的 for 循环结合起来。
【问题讨论】:
-
您能添加一个所需输出的示例吗?
-
如果您执行代码的第一位(直到 print(arrays)),所需的输出与您获得的当前输出相同,但不是有 5 个每个 1 行的数组,而是例如:假设前 15 行在 A 列中有 10 个 1 和 5 个 0。整个块是第一个数组,我们开始计算下一行的新数组。一旦我们通过了 A = 1 的 10 行,我们就将中间的所有行放入第二个数组中,依此类推。我不知道该怎么做,所以我无法直观地向您展示它的样子抱歉
标签: python pandas numpy generator yield