以下是答案:
https://stackoverflow.com/a/47107164/11462274
我尝试创建一个DataFrame,它只包含在另一个DataFrame中找不到的行,但是,不是根据所有列,而是只根据某些特定列,所以我尝试这样做:
import pandas as pd
df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3],
'col2' : [10, 11, 12, 13, 14, 10],
'col3' : [1,5,7,9,6,7]})
df2 = pd.DataFrame(data = {'col1' : [1, 2, 3],
'col2' : [10, 11, 12],
'col3' : [1,5,8]})
df_merge = df1.merge(df2.drop_duplicates(), on=['col1','col3'],
how='left', indicator=True)
df_merge = df_merge.query("_merge == 'left_only'")[df1.columns]
print(df_merge)
但请注意,当不使用所有列时,它们会将名称更改为col2
,例如:
col1 col2_x col3 col2_y _merge
0 1 10 1 10.0 both
1 2 11 5 11.0 both
2 3 12 7 NaN left_only
3 4 13 9 NaN left_only
4 5 14 6 NaN left_only
5 3 10 7 NaN left_only
因此,当我尝试创建不包含不必要列的最终DataFrame时,没有找到未使用的列来生成所需的过滤器:
KeyError(f"{not_found} not in index")
KeyError: "['col2'] not in index"
2条答案
按热度按时间guz6ccqo1#
可以使用
pandas.DataFrame.merge
的suffixes
参数:输出:
fjaof16o2#
另一种选择是,考虑到它是
left
连接,您可以只删除 * other * df中您知道会重叠的列(从而得到更小的合并结果):