我有两个熊猫数据帧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”值。
我如何做到这一点?
谢谢!
答案 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])