python - 识别数据框中列表中的字符串位置
问题描述
我正在尝试在名称列表中创建一个新列(位置),详细说明每个名称的索引位置。
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
推荐阅读
- python - CondaHTTPError:URL 的 HTTP 000 连接失败
- python-3.x - 从列表中删除重复的数字,有什么建议吗?
- cmake - 如何使用多个目录设置 CMAKE_INSTALL_RPATH?
- ios - 快速减小呈现的视图控制器的大小
- r - 重命名索引列,以便我可以在 x 轴上绘图
- powerbi - DAX Measure 根据条件计算交易
- android - 如何对三星 S9 上的 Google Store 中的 BLE Sim(外围模拟器)进行故障排除,Garmin 手表无法发现
- activex - 根据 Word 中的日期和内容添加保存到 PDF
- ios - Firestore 查询在创建新文档时未收到更新
- python - HTTP Python - 图像未加载