根据另一列中的值从pandas列中的列表中提取元素

时间:2019-08-06 08:11:20

标签: python pandas

我有一个后续的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

反正我可以这样做吗?谢谢!

2 个答案:

答案 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);