熊猫组合数据框,删除在所有初始数据框中均未出现值的行

时间:2018-06-19 21:14:50

标签: python python-3.x pandas dataframe

我有两个熊猫数据帧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”值。

我如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:2)

这将适用于任何通用的数据帧列表。另外,数据帧的顺序也没关系。

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