基于两个Pandas列创建范围

时间:2018-04-02 22:49:11

标签: python pandas range

我有以下数据集

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 个答案:

答案 0 :(得分:2)

您提到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]]

答案 1 :(得分:2)

您可以使用列表推导。您可能会发现这比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']].values