在Pandas中选择两个数据帧之间的唯一行

2024-10-01 22:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧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:

^{pr2}$

因此,前两个和最后一个星状标识在DF_A和DF_B之间是通用的。我想创建DF_C以便:

数据框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

Tags: 数据idfielddfvalue解决方案locstar
1条回答
网友
1楼 · 发布于 2024-10-01 22:28:05

这对我很有效:

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值在两个数据帧中的位置,但是通过使用~我们NOT这个条件实际上是否定它的。你链接到的那个几乎是一样的东西,但我想你可能不懂语法?在

编辑

为了得到只在df1中的值和只在df2中的值,可以这样做

^{pr2}$

进一步编辑

所以问题是csv有前导空格,这导致两个数据集中的所有值都是唯一的,要更正这一点,您需要执行以下操作:

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

相关问题 更多 >

    热门问题