pandas 中单列所有行的交集
Intersection of all rows of a single column in pandas
我有一个数据框,其中有一列包含列表值作为行。我想有效地找到列的所有行的交集。现在我已经实现的代码遍历数据框。寻找一种不使用循环的方法......
下面给出了一个示例 df。我正在尝试查找标记列的交集
query tokens
ABC [A,B,C]
CDE [C,D,E]
FGH [A,E,C]
我的预期输出是 [C]
我的 df 有超过 20k 行
您可以使用 numpy.intersect1d
和 functools.reduce
来做到这一点。
from functools import reduce
import pandas as pd
import numpy as np
In [48]: df = pd.DataFrame(['abc', 'cde', 'aec'], columns=['tokens_'])
In [49]: df['tokens'] = df.tokens_.apply(list)
In [50]: df.drop(['tokens_'], inplace=True, axis='columns')
In [51]: df
Out[51]:
tokens
0 [a, b, c]
1 [c, d, e]
2 [a, e, c]
In [52]: reduce(np.intersect1d, df['tokens'])
Out[52]: array(['c'], dtype='<U1')
我有一个数据框,其中有一列包含列表值作为行。我想有效地找到列的所有行的交集。现在我已经实现的代码遍历数据框。寻找一种不使用循环的方法...... 下面给出了一个示例 df。我正在尝试查找标记列的交集
query tokens
ABC [A,B,C]
CDE [C,D,E]
FGH [A,E,C]
我的预期输出是 [C]
我的 df 有超过 20k 行
您可以使用 numpy.intersect1d
和 functools.reduce
来做到这一点。
from functools import reduce
import pandas as pd
import numpy as np
In [48]: df = pd.DataFrame(['abc', 'cde', 'aec'], columns=['tokens_'])
In [49]: df['tokens'] = df.tokens_.apply(list)
In [50]: df.drop(['tokens_'], inplace=True, axis='columns')
In [51]: df
Out[51]:
tokens
0 [a, b, c]
1 [c, d, e]
2 [a, e, c]
In [52]: reduce(np.intersect1d, df['tokens'])
Out[52]: array(['c'], dtype='<U1')