以下可重现代码生成了一个示例数据集,模拟了我的数据,但规模小得多。
以下可重复代码返回我想要的结果,但对于大型数据集来说效率非常低。
如何更有效地完成此操作?
import numpy as np
import pandas as pd
np.random.seed(142536)
df = pd.DataFrame({
"vals": list(np.arange(12).reshape(3,4)),
"idx" : list(np.random.choice([True, False], 12).reshape(3,4))})
df
idx vals
0 [False, True, True, False] [0, 1, 2, 3]
1 [True, True, False, True] [4, 5, 6, 7]
2 [False, True, False, False] [8, 9, 10, 11]
以下可重复代码返回我想要的结果,但对于大型数据集来说效率非常低。
如何更有效地完成此操作?
sel = []
for i in range(len(df.vals)):
sel.append(df.vals[i][df.idx[i]])
df['sel'] = sel
df
idx vals sel
0 [False, True, True, False] [0, 1, 2, 3] [1, 2]
1 [True, True, False, True] [4, 5, 6, 7] [4, 5, 7]
2 [False, True, False, False] [8, 9, 10, 11] [9]
我尝试过np.apply_along_axis()
、np.where()
、df.apply()
和df.transform()
,但是在没有错误的情况下,无法让它们对这个案例起作用。
vals
中的所有行长度是否相同? - user3483203