我有以下数据集
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]
答案 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
。