如何将 pandas isin 用于多列

新手上路,请多包涵

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

I want to find the values of col1 and col2 where the col1 and col2 of the first dataframe are both in the second dataframe.

这些行应该在结果数据框中:

  1. 披萨,男孩

  2. 披萨,女孩

  3. 冰淇淋,男孩

因为所有三行都在第一个和第二个数据框中。

我怎么可能做到这一点?我正在考虑使用 isin ,但是当我必须考虑多个列时,我不确定如何使用它。

原文由 Jun Jang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 388
1 个回答

col1col2 执行 内部合并

 import pandas as pd
df1 = pd.DataFrame({'col1': ['pizza', 'hamburger', 'hamburger', 'pizza', 'ice cream'], 'col2': ['boy', 'boy', 'girl', 'girl', 'boy']}, index=range(1,6))
df2 = pd.DataFrame({'col1': ['pizza', 'pizza', 'chicken', 'cake', 'cake', 'chicken', 'ice cream'], 'col2': ['boy', 'girl', 'girl', 'boy', 'girl', 'boy', 'boy']}, index=range(10,17))

print(pd.merge(df2.reset_index(), df1, how='inner').set_index('index'))

产量

            col1  col2
index
10         pizza   boy
11         pizza  girl
16     ice cream   boy

reset_indexset_index 调用的目的是保留 df2 的索引,如您发布的所需结果。如果索引不重要,那么

pd.merge(df2, df1, how='inner')
#         col1  col2
# 0      pizza   boy
# 1      pizza  girl
# 2  ice cream   boy

就足够了。


Alternatively, you could construct MultiIndex s out of the col1 and col2 columns, and then call the MultiIndex.isin method :

 index1 = pd.MultiIndex.from_arrays([df1[col] for col in ['col1', 'col2']])
index2 = pd.MultiIndex.from_arrays([df2[col] for col in ['col1', 'col2']])
print(df2.loc[index2.isin(index1)])

产量

         col1  col2
10      pizza   boy
11      pizza  girl
16  ice cream   boy

原文由 unutbu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题