我有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中删除相应的行?
答案 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]