Pandas:删除2+ DataFrame中的相应行

时间:2017-08-08 00:23:16

标签: pandas

我有2个DataFrames:

dfA:      dfB:
    n1         n2
a - AA    01 - 0
b - BB    02 - 0
c - CC    03 - 0
d - DD    04 - 1
e - EE    05 - 2
f - FF    06 - 0

dfA和dfB中的行数始终相等。

现在,我将删除dfB中0值的所有行:

dfB = dfB[dfB['n2']!=0]

(很可能只有0行出现在DataFrame的顶部或(顶部和底部)。)

如何从dfA中删除相应的行?

2 个答案:

答案 0 :(得分:2)

您可以使用get_indexer_for提取索引的值,该索引返回索引位置列表(而不是索引值)

dfB.index.get_indexer_for(dfB[dfB['n2'] != 0].index)

然后您可以使用它们删除dfA中的相应值,如下所示

dfA.drop(dfa.index[dfB.index.get_indexer_for(dfB[dfB['n2'] != 0].index)])

确保重新分配df,因为此操作不会修改现有数据帧。它只是复制了它。

答案 1 :(得分:2)

使用dfB创建一个布尔数组。然后将它用作两个数据帧的掩码。

m = dfB.n2.eq(0).values

dfB = dfB[m]
dfA = dfA[m]

<强>调试
复制/粘贴

dfB = pd.DataFrame(dict(n2=[0, 0, 0, 1, 2, 0]), '01 02 03 04 05 06'.split())

m = dfB.n2.eq(0).values

dfB[m]