Pandas - 根据单元格和列中的条件更改单元格值

Pandas - change cell value based on conditions from cell and from column

我有一个包含很多“坏”单元格的 Dataframe。比方说,它们的值都是 -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 很大,我不想对其进行迭代(这当然可以,但会花费很多时间)。

有什么提示吗?

尝试在传递 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

至少,这是有效的(但有列迭代):

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