是否有一个“功能”可以得到两个DataFrame的补充?就像pd.merge的反面一样-内部

时间:2019-01-24 06:32:00

标签: python pandas

我正在尝试根据列属性获取两个数据框的补码。

pd.merge可以取交集,但是有没有一种简单的方法就可以在不创建/改组更多数据帧的情况下获得赞美呢?

有人在这里用一种创建/改组更多数据帧的方法回答了这个问题(how to find the complement of two dataframes),但是我想知道是否存在一种更直接的方法来实现此功能。

2 个答案:

答案 0 :(得分:1)

您可以在两个数据帧上进行外部合并,将指示符设置为List<Map> combineList = titleList.stream().flatMap(titleMap -> codeList.stream().filter( codeMap -> titleMap.get("ID").equals(codeMap.get("ID"))).map( codeMap ->{ Map<String, Object> tempMap = new HashMap<>(); tempMap.put("ID", titleMap.get("ID")); tempMap.put("NAME", titleMap.get("NAME")); tempMap.put("ID", codeMap.get("ID")); tempMap.put("AGE", codeMap.get("AGE")); return tempMap; }) ).collect(Collectors.toList()); 。然后根据True列对数据进行子集处理:

_merge

示例:

combined = df1.merge(df2, on='col1', how='outer', indicator=True)
combined[combined._merge != 'both']

答案 1 :(得分:0)

您可以使用MultiIndexing并消除公用索引和append

df1.set_index(['key1', 'key2'], inplace=True)
df2.set_index(['key1', 'key2'], inplace=True)
df = df1[~df1.index.isin(df2.index)].append(df2[~df2.index.isin(df1.index)], sort=False)\
                                    .reset_index()

print(df)
  key1 key2    A    B    C    D
0   K0   K1   A1   B1  NaN  NaN
1   K2   K1   A3   B3  NaN  NaN
2   K2   K0  NaN  NaN   C3   D3