python从两个列表中创建一个新列表,第二个列表表示重复第一个列表中的元素的次数

时间:2014-12-19 19:44:18

标签: python list pandas

我有这样的数据:

df
col1 col2
3      4
1      2
2      2
4      7

现在数据是pandas df,但我可以想象列列表或任何需要的内容。

我希望输出为此。

[3,3,3,3,1,1,2,2,4,4,4,4,4,4,4]

4 个答案:

答案 0 :(得分:2)

如果col1和col2可以表示为列表,那么:

ans = []
for i in xrange(len(col1)):
    ans+=[col1[i]]*col2[i]

print ans

假设col1和col2的len相等

答案 1 :(得分:2)

([ a  for a, b in zip(df.col1,df.col2) for _ in xrange(b)])
[3, 3, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4]

或使用正常循环:

res = []
for a, b in zip(df.col1, df.col2):
    res.extend([a]* b)
print(res)
[3, 3, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4]

或者只使用repeat

print(df.col1.repeat(df.col2).tolist())

[3, 3, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4]

答案 2 :(得分:1)

这是另一个

>>> sum(([x]*y for (x, y) in zip(col1, col2)), [])
[3, 3, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4]

答案 3 :(得分:1)

In [218]: col1 = [3,1,2,4]

In [219]: col2 = [4,2,2,7]

In [220]: list(itertools.chain.from_iterable(itertools.repeat(n,k) for n,k in zip(col1, col2)))
Out[220]: [3, 3, 3, 3, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4]