我想你可以使用isin http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html用于测试匹配Series
创建自df2
by stack http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.stack.html with Series
从一列创建df1
by squeeze http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.squeeze.html。最后一次重塑unstack http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html:
df3 = df2.stack().isin(df1.squeeze()).unstack()
print (df3)
1 2 3 4 5 6 7
8302813476 False False False False False False False
8302813477 False False False False False False False
8302813478 False False True False False False False
然后找到所有至少有一个的值True
by any http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html:
a = df3.any(axis=1)
print (a)
8302813476 False
8302813477 False
8302813478 True
dtype: bool
最后boolean indexing http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing:
print (a[a].index)
Int64Index([8302813478], dtype='int64')
另一种解决方案是squeeze
use df1['col'].unique()
, 谢谢特德·彼得鲁 https://stackoverflow.com/questions/41178415/compare-df1-column-1-to-all-columns-in-df2-returning-the-index-of-df2/41179004#comment69558023_41179004:
df3 = df2.stack().isin(df1['col'].unique()).unstack()
print (df3)
1 2 3 4 5 6 7
8302813476 False False False False False False False
8302813477 False False False False False False False
8302813478 False False True False False False False
---
I like squeeze
更多,但相同的输出很简单,选择列df1
:
df3 = df2.stack().isin(df1['col']).unstack()
print (df3)
1 2 3 4 5 6 7
8302813476 False False False False False False False
8302813477 False False False False False False False
8302813478 False False True False False False False