You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以轮询方式将列表值循环分配至DataFrame新列

问题描述

我有一个名为List_A的列表:

[A,B,C,D,E,F,G]

需要将其以轮询方式循环分配至DataFrame df的新列col_new,分配需在覆盖DataFrame的行数后停止。我尝试使用groupby.cumcount()方法,但无法设置列表值分配的迭代次数限制,尝试的代码如下:

df['col_new'] = (
    List_A.repeat(df['Col_1'] / len(List_A)).sort_values(
        key=lambda d: d.groupby(s).cumcount(),
        kind='stable',
        ignore_index=True,
    )
)
解决方案

不需要用groupby.cumcount(),直接基于DataFrame行数生成对应长度的轮询序列即可,以下是两种简单可行的方法:

方法一:利用numpy快速生成序列

import numpy as np

# 计算列表需要重复的完整次数和剩余元素数
full_repeats = len(df) // len(List_A)
remainder_count = len(df) % len(List_A)

# 拼接出刚好匹配df行数的轮询序列
polling_sequence = np.tile(List_A, full_repeats).tolist() + List_A[:remainder_count]

# 赋值到新列
df['col_new'] = polling_sequence

方法二:纯Python列表推导式实现

如果不想依赖numpy,直接用索引取模的方式生成序列:

# 遍历df行索引,对列表长度取模得到对应元素
df['col_new'] = [List_A[i % len(List_A)] for i in range(len(df))]

原代码问题说明

你尝试的代码逻辑存在两处问题:一是List_A.repeat()的参数不符合列表方法的要求(Python列表没有repeat方法,这是numpy数组的方法);二是未定义groupby中的s变量,且整体逻辑复杂,无法精准控制序列长度匹配df行数。上面两种方法直接围绕df行数生成对应序列,逻辑更清晰且易控制。

内容的提问来源于stack exchange,提问作者Bruce Wayne 0005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:45:42