我有两个数据帧:
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().
我错过了什么?
答案 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文档。