【问题标题】:How can I run multiple filters in pandas?如何在熊猫中运行多个过滤器?
【发布时间】:2020-02-26 13:46:47
【问题描述】:

我想在不同的列上运行多个过滤器,例如“频率”、“十分位”和“受众”作为“全部”和“维度”=“活动”和 KPI 名称=“本田_2018...”从 Excel 表导入熊猫。我正在运行以下代码:

def filter_df(df, *args):
    for 'Frequency', 'All' in args:
        df = df[df['Frequency'] == 'All']
    return df

它给了我一个错误SyntaxError: can't assign to literal。请帮忙

【问题讨论】:

  • 请提供一些示例数据以及所需的输出;那么帮助会更容易。
  • 你不能以这种方式在for-loop 中使用字符串。你只能做for variable in ['Frequency', 'All']
  • 可能在没有for-loop 的情况下手动编写所有过滤器。
  • @tamalika :请使用指南正确格式化问题,特别是代码块,并提供预期的输入和输出,以便我们提供帮助。

标签: python pandas filter


【解决方案1】:

你可以试试.loc

样本数据:

my_frame = pd.DataFrame(data={'name' : ['alex5','martha1','collin4','cynthia9'],
                              'simulation1':[71,4.8,65,4.7],
                              'simulation2':[71,4.8,69,4.7],
                              'simulation3':[70,3.8,68,4.9],
                              'experiment':[70.3,3.5,65,4.4]})
my_frame

在下面运行这段代码将返回索引 [1,2,3]:

my_frame.loc[(my_frame["simulation1"] == 4.8)]

那么如果你想过滤更多的列使用&,下面这段代码将返回索引[2,3]:

my_frame.loc[(my_frame["simulation1"] == 4.8) &  \
             (my_frame["simulation2"] == 69)
            ]

冲洗并重复,直到您满意为止。

【讨论】:

    【解决方案2】:

    据我所知这是可能的

    df = df[df['Frequency'] == 'All' and df['Something'] == 'Something else']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 2014-09-22
      • 2020-09-18
      • 2021-08-23
      • 1970-01-01
      • 2017-10-03
      • 2017-05-22
      相关资源
      最近更新 更多