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

如何按规则将多列表数据循环填充至空DataFrame?

问题描述

现有三个数据列表:

dates = [1,2,3]  # 周数
stores = [101,102,103]  # 门店编号
items = [12344,4544]  # 商品编号

还有一个空的DataFrame,列名是date、stores、items,需要按下面的规则填充,最终得到date/stores/item组合完全唯一的结果(实际场景里三个列表可能有几千个元素,必须基于列表长度动态实现,不能写死具体数值):

  • 每个周数要重复 len(stores)*len(items) 次(示例里就是3*2=6次)
  • 每个门店编号对应同一个周数时,要重复 len(items) 次(示例里是2次)
  • 商品编号按原始顺序依次和前两者组合

你之前尝试用循环实现但没成功,试的代码是:

a=["A","B","C"]
b=[155,155,155]
x = []
for i in range(len(a)):
    x += [a[i]]*b[i]
print(x)

x = []
for i in range(len(date)):
    x += [date[i]]*b[i]
df['date'] = x
解决方案

方法1:用itertools.product生成笛卡尔积

这是最省心高效的方式——你要的本质就是三个列表的所有唯一组合,正好对应笛卡尔积的结果,不用手动算重复次数,代码简洁还能处理大数据量:

import pandas as pd
from itertools import product

dates = [1,2,3]
stores = [101,102,103]
items = [12344,4544]

# 生成所有不重复的组合
all_combinations = list(product(dates, stores, items))

# 转成DataFrame
df = pd.DataFrame(all_combinations, columns=['date', 'stores', 'items'])

对应规则验证:

  • 每个周数对应3*2=6条记录,符合规则1
  • 每个门店对应同一个周数有2条记录,符合规则2
  • 商品按原始顺序和每个周、门店配对,符合规则3

方法2:手动构造每一列(完全按规则逻辑)

如果不想用itertools,也可以按规则手动构造每一列,所有重复次数都基于列表长度动态计算:

import pandas as pd

dates = [1,2,3]
stores = [101,102,103]
items = [12344,4544]

# 先算各列表的长度,用来动态计算重复次数
store_count = len(stores)
item_count = len(items)
total_per_date = store_count * item_count

# 构造date列:每个日期重复total_per_date次
date_column = [d for d in dates for _ in range(total_per_date)]
# 构造stores列:每个门店重复item_count次,整个门店列表重复len(dates)次
stores_column = [s for _ in dates for s in stores for _ in range(item_count)]
# 构造items列:整个商品列表重复len(dates)*store_count次
items_column = items * (len(dates)*store_count)

# 组装成DataFrame
df = pd.DataFrame({
    'date': date_column,
    'stores': stores_column,
    'items': items_column
})

为啥你之前的循环没成功?

你之前的代码里用了固定的b=[155,155,155],但实际需要的重复次数应该是动态计算的(比如每个日期要重复len(stores)*len(items)次),而且只处理了date列,没覆盖门店和商品的构造逻辑——上面的方法2就是把你的思路补全,改成了动态计算的版本。

内容的提问来源于stack exchange,提问作者Павел

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:37:17