【问题标题】:Selecting Unique Rows between Two DataFrames in Pandas在 Pandas 中的两个 DataFrame 之间选择唯一的行
【发布时间】:2014-06-21 00:56:07
【问题描述】:

我有两个尺寸不等的数据框 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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这对我有用:

    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 中的值,您可以这样做

    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()
    

    【讨论】:

    • 好吧,我这样尝试了链接示例:idx = df_mds['2MASS_ID'].isin(df_survey['Apogee_ID']) df_new = df_survey[~idx]。这给了我以下错误:“提供了不可对齐的布尔系列键”。也许,两个数据框中的名称必须相同?
    • 您是否尝试过我上面的方法,假设您的列数据是正确的,那么您写的可能应该有效,如果上述方法不起作用,您能否发布有问题的数据
    • 您实际上是如何格式化评论的?我上面的评论不是我喜欢的格式。
    • 不,我要试试。会在几分钟内通知您。谢谢。
    • 我认为这不太对;它不会在 df2 中而不在 df1 中捕获 id?
    猜你喜欢
    • 2015-10-15
    • 2023-02-21
    • 2015-06-04
    • 2017-11-16
    相关资源
    最近更新 更多