python - Pandas 中的反向选择

标签 python pandas

我有两个数据集。下面您可以看到代码和数据

import pandas as pd
import numpy as np
pd.set_option('max_columns', None)
import matplotlib.pyplot as plt

data = {'type_sale': ['group_1','group_2','group_3','group_4','group_5','group_6','group_7','group_8','group_9','group_10'],
         'id':[70,20,24,80,20,20,60,20,20,20],
        }
df1 = pd.DataFrame(data, columns = ['type_sale',
                                      'id',])


data = {'type_sale': ['group_1','group_2','group_3'],
         'id':[70,20,24],
        }
df2 = pd.DataFrame(data, columns = ['type_sale',
                                      'id',])

这些代码创建了两个数据集,如下所示:

df1

df2

现在我想创建一个新的数据集 df3,其中 df1 中的值与 id 列中的值 df2 不同(不同的值)。

最终结果如下图

enter image description here

我尝试使用这些代码,但没有给出预期的结果。

df = pd.concat((df1, df2))
print(df.drop_duplicates('id'))

有人可以帮我解决这个问题吗?

最佳答案

尝试如下:

  • 使用df.isin检查 df['id'] 中的每个值是否包含在 df2['id'] 中。
  • 接下来,使用一元运算符 ~(波形符)反转生成的 bool 值 pd.Series,并从 d1 中进行选择。
  • 最后,重置索引。

一句话:

df3 = df1[~df1['id'].isin(df2['id'])].reset_index(drop=True)

print(df3)

  type_sale  id
0   group_4  80
1   group_7  60

关于python - Pandas 中的反向选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73608462/

相关文章:

python - 为什么 xlwings 不会从此数据框中复制超过 8 行?

python - 在 python 3 中解析俄语日期字符串时出错

python - 将时间字符串(小时 :Min:Sec. 毫秒)快速转换为 float

python - 如何根据标题名称移动 csv 中的数据并将其移动到同一列?

python - 使用 python 和 matplotlib 绘制 Excel 工作表?

Python - 不规则多边形的区域导致负值?

python - 如果 "a.pyc"文件存在则删除 "a.py"文件

python - 更新字典的键和值

python - 使用来自特定列的信息将函数应用于 Pandas 数据帧的每个单元格

python - 如何将缺少季度的 0 数据行插入到 pandas 数据框中?