【问题标题】:Deleting nonmatching rows between two data sets pandas删除两个数据集熊猫之间不匹配的行
【发布时间】:2021-06-19 21:58:15
【问题描述】:

我有 2 个非常大的数据集,每列 5 列(h、k、l、强度、sigma)。我想仅就 h、k、l 值逐行比较它们。然后我需要从每个数据集中删除不匹配的行,并只用具有相同 h、k、l 值的匹配行重写每个数据集。我正在使用 datacompy,但不确定如何继续获得最终输出。

【问题讨论】:

    标签: python pandas dataframe compare drop


    【解决方案1】:
    • 您确实是在描述和内部连接(关系理论术语)
    • pandas 中,这是一个 merge()kind="inner"
    df1 = pd.DataFrame(
        {
            "h": range(0, 100, 2),
            "k": range(0, 200, 4),
            "l": range(0, 400, 8),
            "intensity": np.random.uniform(1, 5, 50),
            "sigma": np.random.uniform(0, 1, 50),
        }
    )
    
    df2 = pd.DataFrame(
        {
            "h": range(0, 200, 4),
            "k": range(0, 400, 8),
            "l": range(0, 800, 16),
            "intensity": np.random.uniform(1, 5, 50),
            "sigma": np.random.uniform(0, 1, 50),
        }
    )
    
    # get intersecting rows... in this case 25
    df1 = pd.merge(df1, df2.loc[:,["h","k","l"]], on=["h","k","l"], how="inner")
    
    # get intersecting rows... again 25 rows
    df2 = pd.merge(df1.loc[:,["h","k","l"]], df2, on=["h","k","l"], how="inner")
    
    
    

    【讨论】:

    • 非常感谢。我仍然有重复在数据中出现多次具有相同 hkl 的行的问题。例如,第二行中的 (100) 并不常见。但是,在后面的行中很常见,比如第 98 行中的 (100) 匹配。在这种情况下,所有 (100) 都不会被删除,并且“强度”和“西格玛”实体是随机错误分布的。
    • 好的,所以 h,k,l 不能识别一行。当有多行重复组合时,您希望它如何表现?拿第一?最后的? sigma 和强度的平均值?
    • 即使对于重复的 hkl,只要 (hkl) 存在于两个数据集中的某一行,我只想在每个数据集中保留 Intensity 和 sigma 的精确对应值。最后,我想将两个 sigma 一起绘制和比较,并且 (hkl) 将被视为仅沿 x 轴的类别。
    • 好的,您需要真正考虑您的需求并以可以找到解决方案的方式表达它们。 “删除不匹配的行,意味着有候选键(索引)可用于识别行,然后保留所需的行并过滤/删除不需要的行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2020-12-02
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多