【发布时间】:2020-09-04 13:29:03
【问题描述】:
目前,我在我的数据框上使用apply 方法来创建一个包含可变大小列表的计算列(取决于length 列中的值)。
有没有办法使用 pandas 更有效地创建包含可变大小列表的列?
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [
6, 7, 8, 9, 0], 'length': [3, 5, 7, 9, 3]})
df['computed'] = df.apply(
lambda x: np.array([x['a'], x['b']] + [x['b'] + i for i in range(1, x['length'] - 1)]), axis=1)
所需的输出(适用于上面的代码,但速度很慢):
a b length computed
0 1 6 3 [1, 6, 7]
1 2 7 5 [2, 7, 8, 9, 10]
2 3 8 7 [3, 8, 9, 10, 11, 12, 13]
3 4 9 9 [4, 9, 10, 11, 12, 13, 14, 15, 16]
4 5 0 3 [5, 0, 1]
【问题讨论】:
-
我认为我们没有更好的方法来创建列表类型列..
-
在 a 和 b 中它们都是正数吗?
-
@Divakar 不一定。那会有什么不同吗?长度至少为 2,因为模式是 [a, b, b+1, ..., b + length - 2]。
-
当我看到长度不同的列表时,我认为是 Python 迭代,而不是“矢量化”。真正的
numpy向量化适用于矩形数组,而不是参差不齐的数组(或列表数组)。
标签: python pandas numpy dataframe apply