栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在非简单条件下使用熊猫对DataFrame进行内部或外部联接

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在非简单条件下使用熊猫对DataFrame进行内部或外部联接

我使用ufunc的外部方法来计算结果,这是示例:

首先,一些数据:

import pandas as pdimport numpy as npdf_a = pd.Dataframe([{"a": 1, "b": 4}, {"a": 2, "b": 5}, {"a": 3, "b": 6}, {"a": 4, "b": 8}, {"a": 1, "b": 7}])df_b = pd.Dataframe([{"c": 2, "d": 7}, {"c": 3, "d": 8}, {"c": 2, "d": 10}])print "df_a"print df_aprint "df_b"print df_b

输出:

df_a   a  b0  1  41  2  52  3  63  4  84  1  7df_b   c   d0  2   71  3   82  2  10

内部联接,因为这仅计算

c
&的笛卡尔积
a
,内存使用率小于整个Dataframe的笛卡尔积:

ia, ib = np.where(np.less.outer(df_a.a, df_b.c))print pd.concat((df_a.take(ia).reset_index(drop=True),       df_b.take(ib).reset_index(drop=True)), axis=1)

输出:

   a  b  c   d0  1  4  2   71  1  4  3   82  1  4  2  103  2  5  3   84  1  7  2   75  1  7  3   86  1  7  2  10

要计算左外部联接,请使用

numpy.setdiff1d()
查找
df_a
不在内部联接中的所有行:

na = np.setdiff1d(np.arange(len(df_a)), ia)nb = -1 * np.ones_like(na)oa = np.concatenate((ia, na))ob = np.concatenate((ib, nb))print pd.concat([df_a.take(oa).reset_index(drop=True),       df_b.take(ob).reset_index(drop=True)], axis=1)

输出:

   a  b   c   d0  1  4   2   71  1  4   3   82  1  4   2  103  2  5   3   84  1  7   2   75  1  7   3   86  1  7   2  107  3  6 NaN NaN8  4  8 NaN NaN


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/626184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号