微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在Pandas中选择两个DataFrame之间的唯一行

我有两个不等维的数据框A和B.我想创建一个数据框C,使它只包含A和B之间唯一的行.我试图遵循这个解决方案(excluding rows from a pandas dataframe based on column value and not index value),但无法让它工作.

这是一个例子:

假设这是DF_A:

    Star_ID         Loc_ID      pmRA        pmDE    Field     Jmag    Hmag  
 2M00000032+5737103  4264    0.000000    0.000000    N7789   10.905  10.635
 2M00000068+5710233  4264    8.000000    -18.000000  N7789   10.664  10.132
 2M00000222+5625359  4264    0.000000    0.000000    N7789   11.982  11.433
 2M00000818+5634264  4264    0.000000    0.000000    N7789   12.501  11.892
 2M00001242+5524391  4264    0.000000    -4.000000   N7789   12.091  11.482

这是DF_B:

2M00000032+5737103  
2M00000068+5710233
2M00001242+5524391

因此,前两个和最后一个Star_ID在DF_A和DF_B之间是通用的.我想创建DF_C,以便:

DF_C:

        Star_ID         Loc_ID      pmRA        pmDE    Field     Jmag    Hmag
     2M00000222+5625359  4264    0.000000    0.000000    N7789   11.982  11.433
     2M00000818+5634264  4264    0.000000    0.000000    N7789   12.501  11.892

解决方法:

这对我有用:

In [7]:

df1[~df1.Star_ID.isin(df2.Star_ID)]

Out[7]:

              Star_ID  Loc_ID  pmRA  pmDE  Field    Jmag    Hmag
2  2M00000222+5625359    4264     0     0  N7789  11.982  11.433
3  2M00000818+5634264    4264     0     0  N7789  12.501  11.892

[2 rows x 7 columns]

所以我们在这里做的是创建一个布尔掩码,我们询问两个数据帧中Star_ID值的位置,但是使用〜不是实际上否定它的条件.你链接的那个几乎是一样的但我想你可能不理解语法?

编辑

为了获得仅在df1中的值和仅在df2中的值,您可以执行此操作

unique_vals = df1[~df1.Star_ID.isin(df2.Star_ID)].append(df2[~df2.Star_ID.isin(df1.Star_ID)], ignore_index=True)

进一步编辑

所以问题是csv有前导空格,这导致所有值在两个数据集中都是唯一的,要纠正这个,你需要这样做:

df1.Apogee_ID = df1.Apogee_ID.str.lstrip()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐