基于两个 Pandas 列创建一个范围

5
我有以下数据集。
Out[121]: 
   a  b
0  1  3
1  2  4

我希望生成一个列,其中包含从a到b的数字范围。因此:

Out[128]: 
   a  b      range
0  1  3  [1, 2, 3]
1  2  4  [2, 3, 4] 
2个回答

5
您可以使用列表推导式来实现。相比使用pd.DataFrame.apply,这种方法可能更加高效。
df['range'] = [list(range(i, j+1)) for i, j in df.values]

结果:

   a  b      range
0  1  3  [1, 2, 3]
1  2  4  [2, 3, 4]

这是因为:
  • 你可以通过列表直接分配一个系列。
  • df.values 返回数据帧的 numpy 数组表示形式,当你迭代时,返回每行的内容。
  • 如果你有更多的列,只需使用 df [['a','b']].值

4

既然你提到了range

df['range']=df.apply(lambda x : list(range(x['a'],x['b']+1)),1)
df
Out[242]: 
   a  b      range
0  1  3  [1, 2, 3]
1  2  4  [2, 3, 4]

请注意,您可以使用此方法来加速(替换apply

list(map(lambda x : list(range(x[0],x[1]+1)),df[['a','b']].values))
Out[248]: [[1, 2, 3], [2, 3, 4]]

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