首页 > 解决方案 > 根据另一个数据框中的信息编辑数据框中的值

问题描述

我有一个名为 _df1 的数据框,看起来像这样。请注意,这不是整个数据框,而是其中的一部分。

_df1:

frame   id  x1      y1  x2  y2  
1        1  1363    569 103 241   
2        1  1362    568 103 241  
3        1  1362    568 103 241  
4        1  1362    568 103 241   
964      5  925     932 80  255   
965      5  925     932 79  255   
966      5  925     932 79  255   
967      5  924     932 80  255  
968      5  924     932 79  255   
16       6  631     761 100 251   
17       6  631     761 100 251  
18       6  631     761 100 251   
19       6  631     761 100 251
20       6  631     761 100 251
21       6  631     761 100 251
88       7  623     901 144 123
89       7  623     901 144 123
90       7  623     901 144 123
91       7  623     901 144 123
92       7  623     901 144 123
93       7  623     901 144 123
94       7  623     901 144 123

在完整的数据库中,数据框中有 108003 行和 141 个唯一 ID。一个 ID 代表一个特定的对象,只要该框架具有该对象,该 ID 就会重复。换句话说,我的数据有 141 个不同的对象和 108003 帧。我编写了一个代码来识别具有相同对象但标有不同 ID 的框架。这保存在另一个名为 _df2 的数据框中,如下所示。这也只是数据框的一部分,而不是全部。

_df2:

indexID  matchID    
   4        5
   6        7
   8        9
   12       13
   18       19
   20       21
       .
       .
       .

第二个数据框显示了哪些索引被错误地分类为不同的对象。这意味着“matchID”中的 ID 实际上与“indexID”是同一个对象。_df2 中的这个“indexID”对应于 _df1 中的“id”。

以_df2中的第一行为例,它表示索引4和5是相同的。因此,我需要将 _df1 中所有具有 'id' 5 的帧的 'id' 值更改为 4。这是最终表应该是什么样子的示例,因为 5 必须被分类为 4,而 7 具有归类为6。

输出:

frame   id  x1      y1  x2  y2  
1        1  1363    569 103 241   
2        1  1362    568 103 241  
3        1  1362    568 103 241  
4        1  1362    568 103 241   
964      4  925     932 80  255   
965      4  925     932 79  255   
966      4  925     932 79  255   
967      4  924     932 80  255  
968      4  924     932 79  255   
16       6  631     761 100 251   
17       6  631     761 100 251  
18       6  631     761 100 251   
19       6  631     761 100 251
20       6  631     761 100 251
21       6  631     761 100 251
88       6  623     901 144 123
89       6  623     901 144 123
90       6  623     901 144 123
91       6  623     901 144 123
92       6  623     901 144 123
93       6  623     901 144 123
94       6  623     901 144 123

标签: pythonpandasdataframepython-2.x

解决方案


使用replace

df1.id=df.id.replace(dict(zip(df2.indexID,df2.matchID)))

推荐阅读