当前位置: 首页 > 面试题库 >

使用Pandas查找2个不同大小的数据框之间的不同行

水铭晨
2023-03-14
问题内容

我有2个不同大小的数据帧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中 没有 出现的元素。

通过使用以下代码行,我能够实现自己的目标。

df = pd.DataFrame({})
for i, row1 in df1.iterrows():

    found = False
    for j, row2, in df2.iterrows():

        if row1['A']==row2['C']:

            found = True
            print(row1.to_frame().T)

    if found==False and pd.isnull(row1['A'])==False:
        df = pd.concat([df, row1.to_frame().T], axis=0)

df.reset_index(drop=True)

有没有更优雅,更有效的方法来实现我的目标?

注意:解决方法是

    A   B
0   DDD NaN

问题答案:

我相信需要isinboolean indexing

NaN默认情况下也忽略s行链接新条件:

#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

如果没有必要,请省略,NaN如果C列中不存在:

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

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

(输入DataFrames来自问题)

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


 类似资料:
  • null 如何使用Spring Batch配置JTA/XA事务(Atomikos)?

  • 问题内容: 我肯定在这里错过了一些简单的事情。尝试在熊猫中合并具有相同列名的两个数据框,但右侧的数据框具有一些左侧没有的列,反之亦然。 我试着加入外部联接: 但这产生了: 我还指定了一个要连接的单列(例如on =“ id”),但是它复制了除“ id”以外的所有列,例如attr_1_x,attr_1_y,这并不理想。我也将整个列列表(有很多)传递给了“ on”: 产生: 我想念什么?我想获得一个带有

  • 问题内容: 我试图使用s或函数读取稍大的数据集,但我一直遇到s。数据框的最大大小是多少?我的理解是,只要数据适合内存,数据帧就应该可以,这对我来说不是问题。还有什么可能导致内存错误? 就上下文而言,我试图在《2007年消费者金融调查》中阅读ASCII格式(使用)和Stata格式(使用)。该文件的dta大小约为200MB,而ASCII的大小约为1.2GB,在Stata中打开该文件将告诉我,对于22,

  • 问题内容: 我有3个数据框,可以从下面显示的代码中生成 我想做两件事 a) 将所有这三个数据帧追加到一个大数据帧中 当我尝试使用以下代码进行此操作时,输出结果与预期不符 因此,要解决此问题,我了解我们必须重命名导致以下目标b的列名 b) 以一种优雅的方式将这n个数据帧的列重命名为统一的 请注意,在实时情况下,我可能具有预先不知道的具有不同列名的数据框,但它们中的值始终属于列和,并且始终相同。但请注

  • 2. 不同进制之间的换算 在十进制中,个位的1代表100=1,十位的1代表101=10,百位的1代表102=100,所以 123=1×102+2×101+3×100 同样道理,在二进制中,个位的1代表20=1,十位的1代表21=2,百位的1代表22=4,所以 (A3A2A1A0)2=A3×23+A2×22+A1×21+A0×20 如果二进制和十进制数出现在同一个等式中,为了区别我们用(A3A2A1

  • 我有多个数据集,每个数据集中有不同数量的图像(和不同的图像维度)。在训练循环中,我想从所有数据集中随机加载一批图像,但每个批次只包含单个数据集中的图像。例如,我有数据集A、B、C、D,每个数据集都有图像01。jpg,02。jpg,…n.jpg(其中n取决于数据集),假设批量大小为3。例如,在第一个加载的批次中,我可能会在下一个批次[D/01.jpg,D/05.jpg,D/12.jpg]中获得图像[