我是 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/