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