python - 如何根据另一个 DataFrame 中的数据删除 DataFrame 的行?

标签 python pandas dataframe

我是 Pandas 新手,我正在尝试解决这个问题: 我有一个包含两种产品的示例数据框。 df =

  Product_Num     Date   Description  Price 
          10    1-1-18   Fruit Snacks  2.99
          10    1-2-18   Fruit Snacks  2.99
          10    1-5-18   Fruit Snacks  1.99
          10    1-8-18   Fruit Snacks  1.99
          10    1-10-18  Fruit Snacks  2.99
          45    1-1-18         Apples  2.99 
          45    1-3-18         Apples  2.99
          45    1-5-18         Apples  2.99
          45    1-9-18         Apples  1.49
          45    1-10-18        Apples  1.49
          45    1-13-18        Apples  1.49
          45    1-15-18        Apples  2.99 

我还有另一个类似这样的小数据框(显示相同产品的促销价格):df2=

  Product_Num   Price 
          10    1.99
          45    1.49 

请注意,df2 不包含“日期”列和“描述”列。我想要做的是使用 df1 中的数据从 df1 中删除所有促销价格(对于促销中的所有日期)。做这个的最好方式是什么?

所以,我想看看这个:

  Product_Num     Date   Description  Price 
          10    1-1-18   Fruit Snacks  2.99
          10    1-2-18   Fruit Snacks  2.99
          10    1-10-18  Fruit Snacks  2.99
          45    1-1-18         Apples  2.99 
          45    1-3-18         Apples  2.99
          45    1-5-18         Apples  2.99
          45    1-15-18        Apples  2.99 

我正在考虑对 Price 和 Product_Num 列进行合并,然后看看我可以从那里做什么。但由于有多个日期,我感到很困惑。

最佳答案

isin&

df.loc[~((df.Product_Num.isin(df2['Product_Num']))&(df.Price.isin(df2['Price']))),:]
Out[246]: 
    Product_Num     Date  Description  Price
0            10   1-1-18  FruitSnacks   2.99
1            10   1-2-18  FruitSnacks   2.99
4            10  1-10-18  FruitSnacks   2.99
5            45   1-1-18       Apples   2.99
6            45   1-3-18       Apples   2.99
7            45   1-5-18       Apples   2.99
11           45  1-15-18       Apples   2.99

更新

df.loc[~df.index.isin(df.merge(df2.assign(a='key'),how='left').dropna().index)]
Out[260]: 
    Product_Num     Date  Description  Price
0            10   1-1-18  FruitSnacks   2.99
1            10   1-2-18  FruitSnacks   2.99
4            10  1-10-18  FruitSnacks   2.99
5            45   1-1-18       Apples   2.99
6            45   1-3-18       Apples   2.99
7            45   1-5-18       Apples   2.99
11           45  1-15-18       Apples   2.99

关于python - 如何根据另一个 DataFrame 中的数据删除 DataFrame 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531843/

相关文章:

python - 解析数据框中有不同时区的 pandas DateTime

python - 为什么测试 `NaN == NaN` 不适用于从 pandas dataFrame 中删除?

python - 基于多索引 DataFrame 的水平重新设定价格的最 pythonic 方法是什么?

python - 将数据框按列值分组,同时对另一列求和

python - 我如何使用 scrapy 为 crawlspider 创建规则

python - 获取从 DataFrame 中最后一个有效值开始计算的列中 NaN 数量的快速方法

pandas - 如何对多类数据进行交叉验证?

python - 如何以第三列作为图例绘制 x 和 y 坐标列

python - Pandas:创建具有零值的缺失组合行

python - 当 N=1 时,为什么我得到一个空列表而不是 [0]