我有这样的数据:
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]
答案 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]