【问题标题】:Changing Dataframe Elements After Filtering With .loc使用 .loc 过滤后更改数据框元素
【发布时间】:2021-11-06 02:16:26
【问题描述】:

我正在尝试过滤下面的 7 列,然后根据所有结果,我想将“展示次数”列更改为 1000。

当我运行它时,我会得到一大列布尔结果。我做错了什么?

原始数据集位于此处: https://docs.google.com/spreadsheets/d/1DGH-qOMqysxZqa-kcV22H6huXwUduOQj/edit?usp=sharing&ouid=102686771640548691831&rtpof=true&sd=true

df.loc[
    (((df['Record Type'].str.lower() == 'keyword')
    | (df['Record Type'].str.lower() == 'product targeting')) &
    ((df['Campaign Status'].str.lower() == 'enabled')
    & (df['Ad Group Status'].str.lower() == 'enabled')
    & (df['Status'].str.lower() == 'enabled'))
    & df['Orders'] > 0
    & df['Campaign'].str.contains('b0',case=False))
    ,"Impressions"] > 1000

【问题讨论】:

  • 在寻求帮助时,始终提供一个可重复的最小示例。请发布允许我们重现相同输出的 DataFrame 示例。
  • 我的应用 - 我添加了一个指向我正在使用的数据集的链接。这足够吗?谢谢
  • 我无法打开它,它需要许可。您无需提供全部数据。我们只需要允许我们重现相同行为的最少量数据。您应该将其直接发布在代码块中。

标签: python pandas


【解决方案1】:

IIUC,您可以使用where

condition = (
             ((df['Record Type'].str.lower() == 'keyword') | (df['Record Type'].str.lower() == 'product targeting')) &
             ((df['Campaign Status'].str.lower() == 'enabled') & (df['Ad Group Status'].str.lower() == 'enabled') & (df['Status'].str.lower() == 'enabled')) & 
             df['Orders'] > 0 & 
             df['Campaign'].str.contains('b0',case=False)
             )

df["Impression"] = df["Impression"].where(~condition, 1000)

或者mask:

df["Impression"] = df["Impression"].mask(condition, 1000)

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 2016-04-02
    • 1970-01-01
    • 2020-04-13
    • 2018-05-14
    • 2021-03-29
    • 2021-04-16
    • 2016-01-21
    • 2019-03-13
    相关资源
    最近更新 更多