Python / Pandas - 根据其他数据框的索引进行过滤

时间:2017-07-25 16:02:19

标签: python pandas

我有两个数据帧:

df1:
               Value
dude_id
123                x
543                y
984                z


df2:
          Value
id
123           R
498           S
543           D
984           X
009           Z

我希望以仅包含df2索引中存在的键的方式过滤df1。它应该是这样的:

df2:
          Value
id
123           R
543           D
984           X

我尝试了以下内容:

df2.filter(like=df.index, axis=0)

然而它带我出现以下错误:

ValueError: The truth value of a Int64Index is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我错过了什么?

2 个答案:

答案 0 :(得分:3)

使用loc

In [952]: df2.loc[df1.index]
Out[952]:
        Value
dude_id
123         R
543         D
984         X

并且,您可以重命名索引名称

In [956]: df2.loc[df1.index].rename_axis('id')
Out[956]:
    Value
id
123     R
543     D
984     X

答案 1 :(得分:1)

如果您尝试接受的答案,但会收到类似以下的错误消息:

KeyError: 'Passing list-likes to .loc or [] with any missing labels is no longer supported, 
see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike'

然后尝试

df2.loc[df2.index.intersection(df1.index)]

请参阅reindexing上的Pandas文档。