【问题标题】:Pandas combine dataframes, drop rows that where value does not appear in all initial dataframesPandas 组合数据帧,删除所有初始数据帧中未出现值的行
【发布时间】:2018-06-19 21:14:49
【问题描述】:

我有两个 Pandas 数据框,df1 和 df2。我想将它们组合成一个数据框 (df),但删除任何出现在 df1 的“A”列中但不存在于 df2 的“A”列中的值的行。

输入:

[in]    df1 =          A     B
                 0     i     y
                 1     ii    y

[in]    df2 =          A     B
                 0     ii    x
                 1     i     y
                 2     iii   z
                 3     iii   z

期望的输出:

[out]    df =          A     B
                 0     i     y
                 1     ii    y
                 2     ii    x
                 3     i     y

在上面的示例中,除了 df2 中“A”列中带有“iii”的行之外,所有行都添加到 df,因为“iii”没有出现在 df1 的“A”列中的任何位置。

为了更进一步,数据帧的初始数量不限于两个。可能有三个或更多,我想删除未出现在所有数据框中的任何列“A”值。

我怎样才能做到这一点?

提前致谢!

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    这适用于任何通用的数据框列表。此外,数据帧的顺序并不重要。

    df1 = pd.DataFrame([['i', 'y'], ['ii', 'y']], columns=['A', 'B'])
    df2 = pd.DataFrame([['ii', 'x'], ['i', 'y'], ['iii', 'z'], ['iii', 'z']], columns=['A', 'B'])
    
    dfs = [df1, df2]
    
    set_A = set.intersection(*[set(dfi.A.tolist()) for dfi in dfs])
    df = pd.concat([dfi[dfi.A.isin(set_A)] for dfi in dfs]) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多