Pandas - 两个不同数据框中特定列的通用值

标签 pandas dataframe

我有两个结构如下的 DataFrame:

user_id movie_id    rating
438     588         5
758     588         5
913     588         5
1024    588         5
1214    588         5

user_id movie_id    rating
45      3578        3
321     3578        3
467     3578        3
758     3578        3
1024    3578        3
1381    3578        3

是否有一种 Pandas 原生方法可以在 list 中隔离出现在两个 DataFrame 中的 user_id 值?

对于上面的示例,预期输出为:

[758, 1024]

--

注意:为了帮助引导 Data Science Stack Exchange,此问题已在 datascience.stackexchange.com 上发布并提供了更多背景信息 - 如果您也是 DSSE 的用户,请帮助该网站不断发展 by answering directly there

最佳答案

您可以使用numpy.intersect1d()方法:

In [277]: np.intersect1d(a.user_id, b.user_id).tolist()
Out[277]: [758, 1024]

pd.core.common.intersection()方法,但它似乎很慢(至少在我的笔记本上的 aabb DataFrames [请参阅下面的设置...]):

In [307]: pd.core.common.intersection(a.user_id, b.user_id).tolist()
Out[307]: [1024, 758]

aa DF(50K 行)和 bb DF(60K 行)的计时:

In [294]: aa = pd.concat([a] * 10**4, ignore_index=True)

In [295]: bb = pd.concat([b] * 10**4, ignore_index=True)

In [296]: aa.shape
Out[296]: (50000, 3)

In [297]: bb.shape
Out[297]: (60000, 3)

In [298]: %timeit aa.ix[aa.user_id.isin(bb.user_id),'user_id'].tolist()
10 loops, best of 3: 41.8 ms per loop

In [299]: %timeit np.intersect1d(aa.user_id, bb.user_id).tolist()
100 loops, best of 3: 5.36 ms per loop

In [300]: %timeit pd.merge(aa, bb, on='user_id').user_id.tolist()
...
skipped
...
MemoryError:

In [308]: %timeit pd.core.common.intersection(aa.user_id, bb.user_id).tolist()
10 loops, best of 3: 52.8 ms per loop

关于Pandas - 两个不同数据框中特定列的通用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320298/

相关文章:

python - 读取 pandas 数据框时出现 pyspark 类型错误

python - 在 Pandas 中,我如何展平一组行

python - 在 pandas 数据框中查找包含子字符串的值

R 如何根据另一个变量的范围获得一个变量的平均值?

python - Pandas date_range 从结束日期到开始日期

python - 将多条推文放入数据框中

python - 聚合时间戳数据的更好方法?

r - 将数据帧转换为列表,同时通过键值对进行分组

r - Flowstrates 和 R : extracting and reshaping data in required format

dataframe - 如何在 Julia 中 reshape 和绘制 DataFrame?