对来自两个数据帧的分组数据使用 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.merge
与 indicator=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
我想使用类似于本主题中讨论的函数的东西:
函数应在两个 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.merge
与 indicator=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