作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 pandas 数据框,a 和 b。 a 和 b 共享两个公共(public)列,例如 x 和 y,其中包含英语字符串。 x 和 y 的每个组合在 a 和 b 中都是唯一的。 x 和 y 有一个公共(public)子集,我可以这样计算
c = pandas.merge(a, b, on=['x', 'y'])
我感兴趣的是其余的,d = a - c,相对于 x 和 y 两列,这应该是 a 中的行而不是 b 中的行。
我目前所做的是添加另一个列 xy:
a['xy'] = a['x'] + a['y']
c['xy'] = c['x'] + c['y']
然后
d = a[~a['xy'].isin(c['xy'])]
这对我来说似乎很笨拙,有没有更优雅的方法来做到这一点?
最佳答案
Pandas merge有一个选项可以添加一个指示列,告诉您数据来自哪里。将其与外部合并相结合应该可以满足您的需求。
a_b = pd.merge(a, b, on=['x', 'y'],how="outer",indicator="string")
a.loc[~(a_b.string=="both"),:]
在一些组成的数据帧上进行测试
a_rand = np.reshape(np.random.randint(8,size=40),[10,4])
b_rand = np.reshape(np.random.randint(8,size=40),[10,4])
a = pd.DataFrame(a_rand, columns = ['x','y','a1','a2'])
b = pd.DataFrame(b_rand, columns = ['x','y','b1','b2'])
共享行
pd.merge(a, b, on=['x', 'y'])
x y a1 a2 b1 b2
0 0 6 2 3 1 6
1 3 1 5 5 0 5
2 3 0 4 0 3 2
外连接显示行的来源
pd.merge(a, b, on=['x', 'y'],how="outer",indicator="string")
x y a1 a2 b1 b2 string
0 0 4 1.0 7.0 NaN NaN left_only
1 0 4 2.0 1.0 NaN NaN left_only
2 0 6 2.0 3.0 1.0 6.0 both
3 5 7 0.0 6.0 NaN NaN left_only
4 5 7 2.0 5.0 NaN NaN left_only
5 3 1 5.0 5.0 0.0 5.0 both
6 3 0 4.0 0.0 3.0 2.0 both
7 1 5 2.0 5.0 NaN NaN left_only
8 6 2 0.0 2.0 NaN NaN left_only
9 4 6 6.0 5.0 NaN NaN left_only
10 0 5 NaN NaN 0.0 2.0 right_only
11 1 4 NaN NaN 4.0 4.0 right_only
12 2 7 NaN NaN 4.0 1.0 right_only
13 5 6 NaN NaN 7.0 1.0 right_only
14 3 5 NaN NaN 0.0 0.0 right_only
15 4 7 NaN NaN 3.0 4.0 right_only
16 7 2 NaN NaN 3.0 4.0 right_only
最后,你想要的输出
a.loc[~(a_b.string=="both"),:]
x y a1 a2
0 0 4 1 7
1 0 6 2 3
3 0 4 2 1
4 3 1 5 5
7 1 5 2 5
8 6 2 0 2
9 4 6 6 5
关于python - 在 pandas 中查找二维补集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47770723/
补: Rest 风格请求处理的的内容补充(1) Rest风格请求:注意事项和细节 客户端是PostMan 可以直接发送Put,delete等方式请求,可不设置Filter 如果哟啊
我是一名优秀的程序员,十分优秀!