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

在上面的示例中,所有行都被添加到df,但df2中的行除外,“A”列中有“iii”,因为“iii”不出现在df1的“A”列中的任何位置。
为了更进一步,数据帧的初始数目不限于两个可能有三个或更多,我希望删除所有数据帧中未显示的任何列“a”值。
我怎样才能做到?
提前谢谢!

最佳答案

这将适用于任何通用的数据帧列表而且,数据帧的顺序无关紧要。

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

10-07 13:31
查看更多