如何删除dfA中索引未在dfB中出现的行?
筛选DataFrame保留与另一个DataFrame索引重合的行
原始数据
dfA:
hour distance short_summary 1 5 2.02 Overcast 2 7 1.16 Overcast 3 3 1.35 Partly Cloudy 4 12 1.17 Overcast 5 22 1.80 Overcast 6 9 1.72 Partly Cloudy 7 18 1.09 Partly Cloudy
dfB:
price 1 22.5 3 8.5 5 14.0 6 7.0 7 9.5
需求
删除dfA中索引未出现在dfB里的行,最终保留的dfA如下:
hour distance short_summary 1 5 2.02 Overcast 3 3 1.35 Partly Cloudy 5 22 1.80 Overcast 6 9 1.72 Partly Cloudy 7 18 1.09 Partly Cloudy
实现方法
方法1:使用loc+isin
直接通过索引的isin方法筛选出dfA中索引存在于dfB索引中的行:
dfA_filtered = dfA.loc[dfA.index.isin(dfB.index)]
这会返回一个新的DataFrame,不修改原dfA。如果需要直接修改原dfA,可执行:
dfA.drop(dfA[~dfA.index.isin(dfB.index)].index, inplace=True)
方法2:使用merge合并
通过索引做内连接合并,之后删除不需要的列:
dfA_filtered = dfA.merge(dfB, left_index=True, right_index=True, how='inner').drop('price', axis=1)
how='inner'会只保留索引重合的行,合并后去掉dfB的price列即可得到目标结果。
方法3:使用reindex
直接用dfB的索引重新构建dfA,自动丢弃不存在的索引行:
dfA_filtered = dfA.reindex(dfB.index)
内容的提问来源于stack exchange,提问作者Huesca Rashad
相关产品推荐
相关产品推荐

