用Pandas在两个不同大小的数据帧之间找到不同的行

2024-05-17 04:05:31 发布

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

我有两个不同大小的数据帧df1和df2。在

df1 = pd.DataFrame({'A':[np.nan, np.nan, np.nan, 'AAA','SSS','DDD'], 'B':[np.nan,np.nan,'ciao',np.nan,np.nan,np.nan]})
df2 = pd.DataFrame({'C':[np.nan, np.nan, np.nan, 'SSS','FFF','KKK','AAA'], 'D':[np.nan,np.nan,np.nan,1,np.nan,np.nan,np.nan]})

我的目标是确定df1中那些不在df2中出现的元素。在

我能够使用以下代码行实现我的目标。在

^{pr2}$

有没有更优雅高效的方式来实现我的目标?在

注意:解决方案是

    A   B
0   DDD NaN

Tags: 数据元素目标dataframefffnpnanpd
1条回答
网友
1楼 · 发布于 2024-05-17 04:05:31

我相信需要^{}和{a2}:

默认情况下还省略NaN的行chain new condition:

#changed df2 with no NaN in C column
df2 = pd.DataFrame({'C':[4, 5, 5, 'SSS','FFF','KKK','AAA'], 
                    'D':[np.nan,np.nan,np.nan,1,np.nan,np.nan,np.nan]})
print (df2)
     C    D
0    4  NaN
1    5  NaN
2    5  NaN
3  SSS  1.0
4  FFF  NaN
5  KKK  NaN
6  AAA  NaN

df = df1[~(df1['A'].isin(df2['C']) | (df1['A'].isnull()))]
print (df)
     A    B
5  DDD  NaN

如果不需要,省略NaNs,如果C列中不存在:

^{pr2}$

如果两列中都存在NaN,则使用第二种解决方案:

(输入DataFrame来自问题)

df = df1[~df1['A'].isin(df2['C'])]
print (df)
     A    B
5  DDD  NaN

相关问题 更多 >