在2个数据帧中找到不匹配的对,并生成新的缺失数据帧

2024-10-08 20:16:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不均匀的数据帧,除了一对不同的ID值外,所有变量都相同。你知道吗

例如,其中一个数据帧df1如下所示:

Name     Name ID     State     Gen ID      Unit ID
Nikki    9           AZ        1-1         1
Nikki    9           AZ        1-2         2
Nikki    9           AZ        1-3         3
Mondip   101         NY        1A          1A
Mondip   101         NY        1B          1B
James    11          CA        12-1        12
James    11          CA        13-1        13
Sandra   88          NJ        1           1
.
.
.

另一个数据帧df2如下所示:

Name         Name ID     State     Unit ID
Monte        97          PA        4-1         
Monte        97          PA        4-2         
Nikki Ltd    9           AZ        1        
Nikki Ltd    9           AZ        2        
Mondip       101         NY        1A         
Mondip       101         NY        1B         
James        11          CA        12-1          
James        11          CA        13-1          
.
.
.

如您所见,Gen ID列和Unit ID列以某种方式连接在一起。有时df2中的Unit ID可以是Gen IDdf1中的Unit ID。你知道吗

我想做的是创建一个新的数据帧或列表,其中的每一组NameName IDStatedf1df2不匹配。有时名称稍微匹配NikkiNikki Ltd,所以我需要使用Name ID来处理这个问题。你知道吗

例如,新的数据帧输出df_missing将是:

Name         Name ID     State     Gen ID      Unit ID
Monte        97          PA                    4-1         
Monte        97          PA                    4-2 
Sandra       88          NJ        1           1

有什么简单的方法吗?你知道吗


Tags: 数据nameidunitcaazmontegen
1条回答
网友
1楼 · 发布于 2024-10-08 20:16:38

如果我们假设您可以识别足够接近的名称,那么第一步就是将“Nikki LTD”的实例替换为“Nikki”。一旦这样做了,就很容易识别出每个数据帧中不相互的名称。这些名字是

 merged_df = pd.concat([df1, df2])
 s1 = set(df1['Name'].unique())
 s2 = set(df2['Name'].unique())
 # read as every in s1 thats not in s2 and everyone in s2 thats not in s1
 mutually_distinct_names = list((s1 - s2).union(s2 - s1)) 
 missing_df = merged_df[merged_df['Name'].isin(muutally_distinct_names)]

相关问题 更多 >

    热门问题