Pandas能否复制行并添加一个列,该列的值来自于一个列表?

4

I have a dataframe like this:

    ID value  repeat  ratio
  0 0  IDx10     6       0.5   
  1 1  IDx11     7       1.5   
  2 2  IDx12     8       2.5   

我有一个如下的列表:

l = [1,2]

我想做的是将每一行复制列表的长度个数并在每一新行中放入列表中的每个值。

得到的数据框应该像这样:

    ID value  repeat  ratio  value
  0  0  IDx10  6       0.5    1
  1  0  IDx10  6       0.5    2
  2  1  IDx11  7       1.5    1 
  3  1  IDx11  7       1.5    2  
  4  2  IDx12  8       2.5    1  
  5  2  IDx12  8       2.5    2 

你很可能因为没有提供自己的尝试而被投下了反对票,如果你能解决这个问题,我会给你点赞。请参考 [mcve]。 - Umar.H
2个回答

5

让我们进行一个交叉merge

out = df.merge(pd.Series(l, name='value2'), how='cross')

输出:

   ID  value  repeat  ratio  value2
0   0  IDx12       6    0.5       1
1   0  IDx12       6    0.5       2
2   0  IDx12       6    0.5       3
3   1  IDx12       7    1.5       1
4   1  IDx12       7    1.5       2
5   1  IDx12       7    1.5       3
6   2  IDx12       8    2.5       1
7   2  IDx12       8    2.5       2
8   2  IDx12       8    2.5       3

1
您可以使用 numpy.repeatnumpy.tilepandas.assign 来实现。
l = [1,2,3]
df = pd.DataFrame(np.repeat(df.values, len(l), axis=0), 
             columns=df.columns).assign(new_val=np.tile(l,len(l)))
print(df)

  ID  value repeat ratio  new_val
0  0  IDx12      6   0.5        1
1  0  IDx12      6   0.5        2
2  0  IDx12      6   0.5        3
3  1  IDx12      7   1.5        1
4  1  IDx12      7   1.5        2
5  1  IDx12      7   1.5        3
6  2  IDx12      8   2.5        1
7  2  IDx12      8   2.5        2
8  2  IDx12      8   2.5        3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接