Python 3.x 如何检查一列的所有元素是否在另一列中?

Python 3.x 如何检查一列的所有元素是否在另一列中?,python-3.x,pandas,Python 3.x,Pandas,下面是一个小例子: In [1]: from pandas import DataFrame In [2]: df = DataFrame({"x":range(10), "y":0}) In [3]: df Out[3]: x y 0 0 0 1 1 0 2 2 0 3 3 0 4 4 0 5 5 0 6 6 0 7 7 0 8 8 0 9 9 0 如何检查列y的所有元素是否都在列x中?这将为您提供一个系列,其中每个元素告诉您列x的对应元素

下面是一个小例子:

In [1]: from pandas import DataFrame

In [2]: df = DataFrame({"x":range(10), "y":0})

In [3]: df
Out[3]:
   x  y
0  0  0
1  1  0
2  2  0
3  3  0
4  4  0
5  5  0
6  6  0
7  7  0
8  8  0
9  9  0

如何检查列y的所有元素是否都在列x中?

这将为您提供一个系列,其中每个元素告诉您列x的对应元素是否在列y中:

in_y = df['x'].apply(lambda x : x in df['y'])
然后使用.all()方法:


显然,您可以将其合并为一行,但我认为两行更适合用于说明命令。

这将得到一个系列,其中每个元素告诉您列x的对应元素是否在列y中:

in_y = df['x'].apply(lambda x : x in df['y'])
然后使用.all()方法:


显然,您可以将其合并为一行,但我认为两行更适合用于说明命令。

这将得到一个系列,其中每个元素告诉您列x的对应元素是否在列y中:

in_y = df['x'].apply(lambda x : x in df['y'])
然后使用.all()方法:


显然,您可以将其合并为一行,但我认为两行更适合用于说明命令。

这将得到一个系列,其中每个元素告诉您列x的对应元素是否在列y中:

in_y = df['x'].apply(lambda x : x in df['y'])
然后使用.all()方法:

显然,您可以将其合并为一行,但我认为两行更好地说明命令。

一行:

all([i in df['x'] for i in df['y']])
更新: 如果您在追求性能,您可以在“x”上设置索引,删除列表并使其成为生成器,这将进一步缩短查找时间

df = df.set_index('x')

%timeit all(i in df.index for i in set(df['y']))
100000 loops, best of 3: 14.7 µs per loop

或者如果您的数据将具有重复性,除了构建索引之外,还可以考虑分配诸如“代码> x、y=SET(DF[x)]、SET(DF[′Y′))/<代码>的临时临时名称,以进一步减少重复记录并具有轻微的性能增益。

all([i in df['x'] for i in df['y']])
更新: 如果您在追求性能,您可以在“x”上设置索引,删除列表并使其成为生成器,这将进一步缩短查找时间

df = df.set_index('x')

%timeit all(i in df.index for i in set(df['y']))
100000 loops, best of 3: 14.7 µs per loop

或者如果您的数据将具有重复性,除了构建索引之外,还可以考虑分配诸如“代码> x、y=SET(DF[x)]、SET(DF[′Y′))/<代码>的临时临时名称,以进一步减少重复记录并具有轻微的性能增益。

all([i in df['x'] for i in df['y']])
更新: 如果您在追求性能,您可以在“x”上设置索引,删除列表并使其成为生成器,这将进一步缩短查找时间

df = df.set_index('x')

%timeit all(i in df.index for i in set(df['y']))
100000 loops, best of 3: 14.7 µs per loop

或者如果您的数据将具有重复性,除了构建索引之外,还可以考虑分配诸如“代码> x、y=SET(DF[x)]、SET(DF[′Y′))/<代码>的临时临时名称,以进一步减少重复记录并具有轻微的性能增益。

all([i in df['x'] for i in df['y']])
更新: 如果您在追求性能,您可以在“x”上设置索引,删除列表并使其成为生成器,这将进一步缩短查找时间

df = df.set_index('x')

%timeit all(i in df.index for i in set(df['y']))
100000 loops, best of 3: 14.7 µs per loop

或者如果你的数据将有重复,除了建立索引,你也可以考虑分配的临时名称,如<代码> x,y=SET(DF[x′]),SET(DF[Y')] /<代码>以进一步减少重复记录,并具有轻微的性能增益。你在追求性能吗?我刚刚计时,每个循环大约需要47µs,而另一个答案每个循环大约需要97.4µs。这只是演示了如何实现。你在追求性能吗?我刚刚计时,每个循环大约需要47µs,而另一个答案每个循环大约需要97.4µs。这只是演示了如何实现。你在追求性能吗?我刚刚计时,每个循环大约需要47µs,而另一个答案每个循环大约需要97.4µs。这只是演示了如何实现。你在追求性能吗?我刚刚计时,每个循环大约需要47µs,而另一个答案每个循环大约需要97.4µs