【问题标题】:drop rows with multiple conditions based on multiple column in python基于python中的多列删除具有多个条件的行
【发布时间】:2021-07-12 16:24:41
【问题描述】:

我有一个数据集(df)如下:

当 SKU 为“abc”且包装为“1KG”和“5KG”时,我想根据条件删除行。

我尝试过使用以下代码:

df.drop( df[ (df['SKU'] == "abc") & (df['Packing'] == "10KG") & (df['Packing'] == "5KG") ].index, inplace=True)

尝试上述代码时出现以下错误:

NameError                                 Traceback (most recent call last)
<ipython-input-1-fb4743b43158> in <module>
----> 1 df.drop( df[ (df['SKU'] == "abc") & (df['Packing'] == "10KG") & (df['Packing'] == "5KG") ].index, inplace=True)

NameError: name 'df' is not defined

对此的任何帮助将不胜感激。谢谢。

【问题讨论】:

  • “NameError: name 'df' is not defined”有什么困惑?您从未定义变量 df。
  • 你确定你的DataFrame被称为df吗?可以打印df.head() 来验证吗?
  • 欢迎来到 StackOverflow!这里的问题是你没有定义df。请查看如何创建minimal reproducible exampleHow to Ask。除其他事项外,这些教程将告诉您包含数据框的图像。相反,将其复制并粘贴为代码格式,或者更好的是,请参阅this answer,了解如何包含一个好的 pandas 示例。
  • 正如上面其他人提到的,它没有看到你定义了df。此外,Python 中的布尔与运算是and。我认为&amp; 是按位与运算。

标签: python pandas dataframe


【解决方案1】:

我建议试试这个:

df = df.loc[~((df['SKU'] == 'abc') & (df['packing'].isin(['1KG', '5KG']))]

.loc 用于帮助定义条件,使用 ~ 基本上意味着“不”这些条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多