gpt4 book ai didi

python - 仅当 Pandas 中的所有值均为 0 时,才将 0 替换为选定列的 NaN

转载 作者:行者123 更新时间:2023-12-05 09:03:33 30 4
gpt4 key购买 nike

给定一个数据框 df 如下:

   id  value1  value2  value3
0 0 22 1 7
1 1 0 0 0
2 2 0 0 0
3 3 4 1 25
4 4 5 0 24
5 5 0 0 3

或者:

df = pd.DataFrame([{'id': 0, 'value1': 22, 'value2': 1, 'value3': 7},
{'id': 1, 'value1': 0, 'value2': 0, 'value3': 0},
{'id': 2, 'value1': 0, 'value2': 0, 'value3': 0},
{'id': 3, 'value1': 4, 'value2': 1, 'value3': 25},
{'id': 4, 'value1': 5, 'value2': 0, 'value3': 24},
{'id': 5, 'value1': 0, 'value2': 0, 'value3': 3}])

我需要对 'value1'、'value2'、'value3' 列进行子集化,如果所有值都是 ,则将 0 替换为 NaN code>0 逐行。我怎样才能在 Pandas 中实现这一点?

预期的结果是这样的:

   id  value1  value2  value3
0 0 22.0 1.0 7.0
1 1 NaN NaN NaN
2 2 NaN NaN NaN
3 3 4.0 1.0 25.0
4 4 5.0 0.0 24.0
5 5 0.0 0.0 3.0

我试过的代码:

cols = ['value1', 'value2', 'value3']
df[cols] = df[cols].replace({'0': np.NaN, 0: np.NaN})

最佳答案

使用mask :

df[cols] = df[cols].mask(df[cols].eq(0).all(axis=1))

mask如果条件 (df[cols].eq(0).all(axis=1)) 为 True,则自动将行设置为 NaN .

原答案:

我更喜欢面具:

>>> df.set_index('id').mask(df[cols].eq(0).all(axis=1))
value1 value2 value3
id
0 22.0 1.0 7.0
1 NaN NaN NaN
2 NaN NaN NaN
3 4.0 1.0 25.0
4 5.0 0.0 24.0
5 0.0 0.0 3.0
>>>

重置索引:

>>> df.set_index('id').mask(df[cols].eq(0).all(axis=1)).reset_index()
id value1 value2 value3
0 0 22.0 1.0 7.0
1 1 NaN NaN NaN
2 2 NaN NaN NaN
3 3 4.0 1.0 25.0
4 4 5.0 0.0 24.0
5 5 0.0 0.0 3.0
>>>

关于python - 仅当 Pandas 中的所有值均为 0 时,才将 0 替换为选定列的 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69877974/

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