【问题标题】:Pandas - change cell value based on conditions from cell and from columnPandas - 根据单元格和列的条件更改单元格值
【发布时间】:2021-05-21 15:36:19
【问题描述】:

我有一个包含很多“坏”单元格的数据框。假设它们的值都是 -99.99,我想删除它们(将它们设置为 NaN)。

这很好用:

df[df == -99.99] = None

但实际上,只有在同一行中的另一个单元格的市场为 1(例如,在“错误”列中)时,我才想删除所有这些单元格。

我想删除所有 -99.99 单元格,但前提是 df["Error"] == 1。

我认为最直接的解决方案是

df[(df == -99.99) & (df["Error"] == 1)] = None

但它给了我错误:

ValueError: cannot reindex from a duplicate axis

我尝试了互联网上所有给定的解决方案,但我无法让它发挥作用! :(

由于我的 Dataframe 很大,我不想对其进行迭代(当然,这会起作用,但需要很多时间)。

有什么提示吗?

【问题讨论】:

    标签: python pandas replace conditional-statements cell


    【解决方案1】:

    在传递 numpy 值时尝试使用广播:

    # sample data, special value is -99
    df = pd.DataFrame([[-99,-99,1], [2,-99,2], 
                       [1,1,1], [-99,0, 1]], 
                      columns=['a','b','Errors'])
    
    # note the double square brackets
    df[(df==-99) & (df[['Errors']]==1).values] = np.nan
    

    输出:

         a     b  Errors
    0  NaN   NaN       1
    1  2.0 -99.0       2
    2  1.0   1.0       1
    3  NaN   0.0       1
    

    【讨论】:

    • 就是这样,它有效,非常感谢!
    【解决方案2】:

    至少,这是可行的(但使用列迭代):

    for i in df.columns:
        df.loc[df[i].isin([-99.99]) & df["Error"].isin([1]), i] = None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2021-09-11
      • 2022-11-14
      • 1970-01-01
      • 2017-08-27
      • 2023-03-18
      • 2022-09-29
      相关资源
      最近更新 更多