python-3.x - 将列中的元素映射到其在另一列中的位置
问题描述
我有一个我无法解决的小问题。我已经尝试了几件事,但都没有成功。所以,把它放到上下文中:
我有许多位置已知的对象。在我的设置中,我什至有设备计算它们的位置(三边测量,但这对这个问题并不重要)。
Place True position Calculated position
0 X1 [A,B,C] [A,C,D,F]
1 X2 [D,E,F] [E,H]
2 X3 [G,H] [G,A]
因此,在 中Place
,X1
物体A,C
在它们真正所在的位置D,F
被检测到,但尽管它们在 中却被检测到X2
。因此,要知道不应该在其中找到哪些元素,X1
我执行以下操作
df['Position difference'] = df['Calculated position'].map(set) - df['True position'].map(set)
def convert(set):
return list(set)
df['Position difference'] = df['Position difference'].apply(convert)
返回:
Place True position Calculated position Position difference
0 X1 [A,B,C] [A,C,D,F] [F, D]
1 X2 [D,E,F] [E,H] [H]
2 X3 [G,H] [G,A] [A]
我想要做的是创建一个列,其中元素将是元素Position difference
实际所在的位置:
Place True position Calculated position Diff Pos
0 X1 [A,B,C] [A,C,D,F] [D,F] X2,X2
1 X2 [D,E,F] [E,H] [H] X3
2 X3 [G,H] [G,A] [A] X1
我尝试使用 df.iloc,但它变得如此凌乱,我不知道该怎么做。最终游戏是能够说出一个元素离它的实际位置有多远。例如,如果X1,X2,X3
彼此相邻,则D,F
发现距离它们实际所在的位置 1 节。
非常感谢任何提示。
解决方案
这里有一些代码可以帮助您入门:
def func():
l, d = [], {}
for p, t, c in df.to_numpy():
l.append([*set(c) - set(t)])
d.update(dict.fromkeys(t, p))
for item in l:
yield item, ','.join(map(d.get, item))
df[['diff', 'Pos']] = [*func()]
print(df)
Place True position Calculated position diff Pos
0 X1 [A, B, C] [A, C, D, F] [F, D] X2,X2
1 X2 [D, E, F] [E, H] [H] X3
2 X3 [G, H] [G, A] [A] X1
推荐阅读
- python - 无法将元组列表 [('1',), ('2',), ('3',)] 转换为列表 ['1', '2', '3']?
- git - 如何使用本地文件快捷方式 git clone
- ansible - group_vars/all/ 目录中的文件是什么?
- python - 干净地退出python3函数而不离开repl
- kubernetes - 如何在 Kubernetes 集群级别查找可用资源?
- spring-boot - 在 Thymeleaf 中访问 @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
- c - 可变参数宏扩展出错了
- docker - Docker 映像:如何在生产中部署一个简单的修补程序,而不在每次发布时打包整个应用程序?
- maven - 使用 IntelliJ 作为 Gradle 项目打开了一个源目录,但它是一个 Maven 项目
- javascript - 比较两个数组和唯一值计数?