思路
是有两个相同结构的数据表,已知第二个表是第一个表的部分数据,需要以其中两列为单位,判断在第一个表中存在,在另外一个表中不存在的数据。
思路:
- 我们先将 df1 和 df2 的 x、y 列取出,组合为元组形成,这样就先成为一个整体,形成了两个 Series,然后我们用
Series 的 isin 方法来判断是否存在。 - 得到是不否存在的布尔序列后,再应用到 df1,这里我们需要不存在的可以用 ~ 取反,具体可以看代码实现。
二、使用步骤
1.引入库
代码如下(示例):
import pandas as pd
2.读入数据
代码如下(示例):
# 数据1
df1 = pd.DataFrame({
'x': ['a', 'b', 'c', 'd', 'e'],
'y': [1, 2, 3, 2, 1],
'z': ['how', 'are', 'you', 'fine', 'thanks']
})
df1
# 数据2
df2 = pd.DataFrame({
'x': ['a', 'b', 'c'],
'y': [1, 2, 3],
'z': ['what', 'is', 'you']
})
df2
# 如以上数据,df1 中包含了 df2 的内容,现在需要以 x、y 列组合为整体,看 df1 中存在,在 df2 中不存在的数据。其中,z 列的内容认为信息过载的数据,我们不用关心。
# 很明显,df1 最后两行,不在 df2 中。
#根据以上思路,先将 x 和 y 列转为一个序列:
df1[['x','y']].apply(tuple, axis=1)
#再将 df2 的两列做以上操作后转为列表,方便使用 isin 检测操作:
df2[['x','y']].apply(tuple, axis=1).to_list()
#最后是整个判断检测结果:
slice_lable = (
df1[['x','y']].apply(tuple, axis=1)
.isin(df2[['x','y']].apply(tuple, axis=1)
.to_list()
)
)
slice_lable
# 最后,再应用到筛选操作上
# 在 df1 中存在,df2 中不存在的
df1[~slice_lable]
总结
以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。