gpt4 book ai didi

numpy - 使用 np.where 但如果条件为 False 则保持现有值

转载 作者:行者123 更新时间:2023-12-04 14:12:32 26 4
gpt4 key购买 nike

我喜欢 np.where,但从来没有完全掌握它。

我有一个数据框可以说它看起来像这样:

import pandas as pd
import numpy as np
from numpy import nan as NA
DF = pd.DataFrame({'a' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
'b' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
'c' : [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'd' : [5, 1, 2 ,1, 1 ,22, 30, 1, 0, 0, 0]})

现在我想做的是当所有行值都为零时用 NaN 值替换 0 值。至关重要的是,在所有行值不为零的情况下,我想保留行中的任何其他值。

我想做这样的事情:
cols = ['a', 'b', 'c', 'd']
condition = (DF[cols] == 0).all(axis=1)
for col in cols:
DF[col] = np.where(condition, NA, ???)

我把???为了表明如果条件为 False,我不知道在那里放置什么值,我只想保留已经存在的任何值。这可以通过 np.where 实现,还是应该使用其他技术?

最佳答案

有一个pandas.Series方法( where 顺便说一句)正是这种任务。起初似乎有点落后,但从文档来看。

Series.where(cond, other=nan, inplace=False, axis=None, level=None, try_cast=False, raise_on_error=True)

Return an object of same shape as self and whose corresponding entries are from self where cond is True and otherwise are from other.



所以,你的例子将成为
cols = ['a', 'b', 'c', 'd']
condition = (DF[cols] == 0).all(axis=1)
for col in cols:
DF[col].where(~condition, np.nan, inplace=True)

但是,如果您要做的只是将特定列集的全零行替换为 NA ,你可以这样做
DF.loc[condition, cols] = NA

编辑

要回答您原来的问题, np.where遵循相同的 broadcasting rules与其他数组操作一样,因此您可以替换 ???DF[col] ,将您的示例更改为:
cols = ['a', 'b', 'c', 'd']
condition = (DF[cols] == 0).all(axis=1)
for col in cols:
DF[col] = np.where(condition, NA, DF[col])

关于numpy - 使用 np.where 但如果条件为 False 则保持现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25717397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com