首页 > 解决方案 > 比较熊猫中具有不同形状的两个不同数据框的两列

问题描述

我有两个具有相同列标题的不同数据框,我想比较列内容并删除数据框 A 中存在但数据框 B 中不存在的值,例如,

df1 = pd.DataFrame([('1', 'A',    389.0, 1.2),
           ('2', 'B',     24.0, 1.4),
           ('3',   'C',   80.5, 2.2),
           ('4', 'D', 13.4, 5)],
           columns=['items', 'Chambers', 'V','I'],
           )
df2 = pd.DataFrame([('1', 'A',    389.0, 1),
           ('2', 'E',     24.0, 2.1),
           ('3',   'C',   90.5,1.8),
           ('4', 'B', 10, 0.7),
           ('5','D',80.5,7)],
           columns=['items', 'Chambers', 'V','I'],
           )

我想删除 df2 中的值“D”和“E”并保留所有其他值。我希望这很清楚:)

提前致谢!

标签: pandas

解决方案


看起来 Chambers = B 与 Chambers = D 的情况相同,因此很难准确理解您要做什么。在您只想从一个 DataFrame 中获取另一个合并中的行的情况下,可以选择。merge 在两个 DataFrame 之间创建一个包含相关数据的组合 DataFrame。

例如:

df2.merge(df1, how='inner', left_on=['items', 'Chambers'], right_on=['items', 'Chambers'])

为您提供一个组合的 DataFrame,其中 df1 和 df2 之间的“items”和“Chambers”都匹配。

  items Chambers    V_x  I_x    V_y  I_y
0     1        A  389.0  1.0  389.0  1.2
1     3        C   90.5  1.8   80.5  2.2

或者,如果您只想要 Chambers 匹配的行:

df2.merge(df1, how='inner', left_on=['Chambers'], right_on=['Chambers'])

给出:

  items_x Chambers    V_x  I_x items_y    V_y  I_y
0       1        A  389.0  1.0       1  389.0  1.2
1       3        C   90.5  1.8       3   80.5  2.2
2       4        B   10.0  0.7       2   24.0  1.4
3       5        D   80.5  7.0       4   13.4  5.0

如果那不完全是你的意思,你能提供一个你预期结果的例子吗?


推荐阅读