如何基于DataFrame列生成指定重复次数的元素列表?
解决方法
针对你的需求,有两种简便的实现方式,都是基于Pandas的高效操作:
方法一:使用numpy.repeat(推荐,数据量大时更高效)
利用numpy的repeat函数直接按指定次数重复每个元素,再转成列表:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'value': ['a', 'b', 'c', 'd'], 'count': [1, 2, 3, 4] }) # 生成目标列表 list_wanted = np.repeat(df['value'], df['count']).tolist() # 结果:['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd']
方法二:使用Pandas的apply+explode
先通过apply将每个值转换成重复指定次数的子列表,再用explode展开成单个元素,最后转成列表:
import pandas as pd df = pd.DataFrame({ 'value': ['a', 'b', 'c', 'd'], 'count': [1, 2, 3, 4] }) # 生成重复后的子列表列 df['repeated_values'] = df.apply(lambda row: [row['value']] * row['count'], axis=1) # 展开并转成列表 list_wanted = df['repeated_values'].explode().tolist()
为什么你之前的尝试无效?
你提到的“值列表与次数列表相乘”,本质是尝试对两个列表做乘法操作,但Python中列表与列表无法直接相乘;如果是用列表推导式[val * cnt for val, cnt in zip(lista, listb)],得到的是字符串重复(比如'b'*2变成'bb'),而非将元素作为独立项重复,所以和需求不符。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

