Python 删除与另一个数据帧相交处缺少的数据帧行

Python 删除与另一个数据帧相交处缺少的数据帧行,python,pandas,Python,Pandas,我有一个数据帧,例如: name value_1 ... value_n 1 a 11.5 ... 13.2 2 b 11.5 ... 17.9 3 a 10.0 ... 21.3 4 a 9.5 ... 11.1 5 b 10.0 ... 7.2 6 a 10.5 ... 3.0 我按名称分组,因此现在有两个数据帧: name

我有一个数据帧,例如:

    name    value_1 ... value_n
1    a      11.5    ...  13.2
2    b      11.5    ...  17.9
3    a      10.0    ...  21.3
4    a      9.5     ...  11.1
5    b      10.0    ...  7.2
6    a      10.5    ...  3.0
我按名称分组,因此现在有两个数据帧:

    name    value_1 ... value_n
1    a      11.5    ...  13.2
3    a      10.0    ...  21.3
4    a      9.5     ...  11.1
6    a      10.5    ...  3.0

    name    value_1 ... value_n
2    b      11.5    ...  17.9
5    b      10.0    ...  7.2
然后,我只想保留那些
值_1
在两个数据帧中的条目。我不在乎其他专栏。我的尝试:

  • 使用
    isin
    ->不起作用,因为它要求所有列包含相同的数据
  • 交集:
    pd.merge(group_a,group_b,how='internal',on=['value_1'])
    ,哪种方式有效,但结果是数据框包含合并的两行的列,例如
    value_n_x
    value_n_y
    ,这不符合我的需要
  • 还有其他想法吗?

    我想你可以尝试一下
    df
    子集,比如:

    print group_a
      name  value_1  value_n
    1    a     11.5     13.2
    3    a     10.0     21.3
    3    a     10.0     21.3
    4    a      9.5      1.1
    6    a     10.5      3.0
    
    print group_b
      name  value_1  value_n
    2    b     11.5     17.9
    5    b     10.0      7.2
    
    print pd.merge(group_a[['value_1']], group_b[['value_1']], how='inner', on=['value_1'])
       value_1
    0     11.5
    1     10.0
    2     10.0
    
    第二种解决方案的使用和配合:


    但这并不能帮助我实现我的主要目标,即从inicial数据帧中删除其余的行。这只会改变我的方法,只给我值_1行,而不是中间对照中的所有行。有什么想法吗?我觉得你的aproach非常好,只是我想通过删除不必要的列来改进它。当然,我很感激,但我仍然需要获得这些结果,并以某种方式使用它们从初始数据帧中删除合并结果中不存在的条目。目前,我正在手工操作,将结果归档,但这似乎不是一种类似于蟒蛇的方式
    inter = np.intersect1d(group_a['value_1'], group_b['value_1'])
    print inter
    [ 10.   11.5]
    
    mask1 = group_a['value_1'].isin(inter)
    mask2 = group_b['value_1'].isin(inter)
    
    print group_a.loc[mask1]
      name  value_1  value_n
    1    a     11.5     13.2
    3    a     10.0     21.3
    3    a     10.0     21.3
    
    print group_b.loc[mask2]
      name  value_1  value_n
    2    b     11.5     17.9
    5    b     10.0      7.2