python-3.x Pandas形左连接,其中多列上的right为空

wwodge7n  于 2023-01-22  发布在  Python
关注(0)|答案(2)|浏览(134)

我有两个Pandasdf x和y,都有相同的3列A B C(不能为空)。我需要创建一个新的df z,通过“从x中减去与y的行完全相同的行”获得,即a

x left join y on x.A=y.A and x.B=y.B and x.C=y.C
where y.A is null

我该怎么做呢?被索引,连接,合并,连接,...
示例:

dataframe x
A    B    C
q1   q2   q3
q4   q2   q3
q7   q2   q9

dataframe y
A    B    C
q4   q2   q3

dataframe z
A    B    C
q1   q2   q3
q7   q2   q9
rkkpypqq

rkkpypqq1#

我认为只需要leftDataFrame中带有指示器和过滤器的merge

df = x.merge(y, indicator='i', how='outer').query('i == "left_only"').drop('i', axis=1)
print (df)
    A   B    C
0  q1  q2   q3
2  q7  q2  q93

在早期版本的Pandas中,可能需要将.drop('i', axis=1)替换为.drop('i',1),前者是为了避免在以后版本的Pandas中出现警告。

flvlnr44

flvlnr442#

以下是使用另一个 Dataframe 从 Dataframe 中删除某些行的一些其他方法:

pd.concat([dfx,dfy]).drop_duplicates(keep=False)

dfx.loc[[i not in dfy.to_records(index = False) for i in dfx.to_records(index = False)]]

dfx.loc[~dfx.apply(tuple,axis=1).isin(dfy.to_records(index = False))]

pd.MultiIndex.from_frame(dfx).symmetric_difference(pd.MultiIndex.from_frame(dfy)).to_frame().reset_index(drop=True)

pd.DataFrame(set(dfx.apply(tuple,axis=1)).symmetric_difference(dfy.apply(tuple,axis=1)))

相关问题