我有一个后续的df熊猫,我想根据num列上的任何数字从列表列中提取元素:
list num
[1,2,3,4,5] 3
[7,2,1,3,4] 4
获得:
list num element
[1,2,3,4,5] 3 4
[7,2,1,3,4] 4 4
我尝试过:
df['element'] = df['list'].apply(lambda x: x[df['num'].apply(lambda y: y)])
但是我得到了TypeError: list indices must be integers or slices, not Series
。
反正我可以这样做吗?谢谢!
答案 0 :(得分:2)
在axis=1
中每行使用DataFrame.apply
:
df['element'] = df.apply(lambda x: x['list'][x['num']], axis=1)
print (df)
list num element
0 [1, 2, 3, 4, 5] 3 4
1 [7, 2, 1, 3, 4] 4 4
或使用zip
进行列表理解:
df['element'] = [x[y] for x, y in zip(df['list'], df['num'])]
如果某些值与列表不匹配,可以在这里使用:
def func(a, b):
try:
return a[b]
except Exception:
return np.nan
df['element'] = df.apply(lambda x: func(x['list'], x['num']), axis=1)
答案 1 :(得分:0)
使用numpy花式索引
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);