标识数据帧中列表中的字符串位置



我正在尝试创建一个新列(位置(,详细说明名称列表中每个名称的索引位置。

df = pd.DataFrame({'name': ['a', 'b', 'c', 'd', 'e'], 'names' : [['a','b','c'], ['a','b'], ['c','d','a'], ['b','a','d','c','e'], ['e','a']], 'position':[0,1,0,2,0]})

我试着用…转换为布尔值。。。。

df['match'] = (df.apply(lambda x: [x['name'] == m for m in x['names']], axis=1))

但仍然无法得到我想要的答案。

我看了很多帖子,但找不到任何关于将index((应用于数据帧中的列表的具体内容。

提前感谢

如果值总是匹配,请使用.index:

df['match'] = (df.apply(lambda x: x['names'].index(x['name']), axis=1))
print (df)
name            names  position  match
0    a        [a, b, c]         0      0
1    b           [a, b]         1      1
2    c        [c, d, a]         0      0
3    d  [b, a, d, c, e]         2      2
4    e           [e, a]         0      0

如果可能,不匹配是可能的。使用生成器理解的解决方案,如果不匹配,则使用next作为默认值,此处为-1:

#changed data
df = pd.DataFrame({'name': ['r', 'b', 'c', 'd', 'e'], 
'names' : [['a','b','c'], ['a','b'], ['c','d','a'],
['b','a','d','c','e'], ['e','a']],  
'position':[0,1,0,2,0]})
f = lambda x: next((i for i, m in enumerate(x['names']) if x['name'] == m), -1)
df['match'] = df.apply(f, axis=1)
print (df)
name            names  position  match
0    r        [a, b, c]         0     -1
1    b           [a, b]         1      1
2    c        [c, d, a]         0      0
3    d  [b, a, d, c, e]         2      2
4    e           [e, a]         0      0

最新更新