对来自两个数据帧的分组数据使用 isin() 函数

Using the isin() function on grouped data from two dataframes

我想使用类似于本主题中讨论的函数的东西: 。 但是,有两个不同长度的 DataFrame,并且都按变量分组。

函数应在两个 DataFrame 中按年份对列 Dev_stage 进行分组,比较分组数据并提供不在这些分组 DataFrame 之一中的数据。

我的片段:

>>> df1
Out:
    Dev_stage Year
0   1         1989
1   2         1989
2   2         1989
3   3         1989
4   1         1990
5   1         1990
6   3         1990

>>> df2
Out:
    Dev_stage Year
0   1         1989
1   2         1989
2   2         1990
3   1         1990
4   3         1990

我正在尝试这样的事情:

out = lambda x, y: x[~x['Dev_stage'].isin(y['Dev_stage'])]
out(df1.groupby('Year'), df2.groupby('Year'))

但也得到错误:'SeriesGroupBy' object has no attribute 'isin'。我以为 lambda 会解决这个问题。

期待这样的事情:

out:   
    Dev_stage Year
3   3         1989

谢谢!

IIUC,可以使用inner merge在多个列中保持相同的值,然后过滤掉它们

out = df1[~df1.index.isin(df1.reset_index().merge(df2, how='inner')['index'])]
print(out)

   Dev_stage  Year
3          3  1989
6          3  1990

df.mergeindicator=True 一起使用:

In [958]: out = df1.merge(df2, how='left', indicator=True).query('_merge != "both"').drop('_merge', 1)

In [959]: out
Out[959]: 
   Dev_stage  Year
3          3  1989