我有两个数据框,其中一个较大,具有名称和姓氏,被定义为多索引(家族和名称)数据框:
Age Weight
Family Name
Marge
SIMPSON Bart
Lisa
Homer
Harry
POTTER Lilian
Lisa
James
另一个df较小,仅包含第一个df的一些名称:
Family Name
SIMPSON Lisa
SIMPSON Bart
POTTER Lisa
我想过滤第一个df以仅显示第二个df中存在的名称。
为了更好地解释,作为参考,我将在Excel中创建一个额外的列和类型(假设第二个df在Sheet2中)
=COUNTIFS(Sheet2!A:Sheet2!A,A1,Sheet2!B:Sheet2!B,B1)
比我将在创建的列中过滤等于1的行。
附:我不是在问如何复制Excel代码,因为我知道很可能在python中有一种简单的方法。
答案 0 :(得分:1)
您的df1
具有多个索引,因此普通过滤器将无法工作,我们可以尝试reindex
df1 = df1.reindex(pd.MultiIndex.from_frame(df2))
答案 1 :(得分:1)
join
df2.join(df1, on=df1.index.names).set_index(df1.index.names)
Age Weight
Family Name
SIMPSON Lisa NaN NaN
Bart NaN NaN
POTTER Lisa NaN NaN
merge
df1.merge(df2, on=df1.index.names).set_index(df1.index.names)
Age Weight
Family Name
SIMPSON Lisa NaN NaN
Bart NaN NaN
POTTER Lisa NaN NaN
答案 2 :(得分:0)
让df1
是具有MutiIndex
的较大数据框,而df2
是具有名称的较小数据框。
然后您可以执行以下操作:
names = set(df2.Name.astype(str).values)
df1 = df1.loc[df1.index.get_level_values('Name').isin(names)]