首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果两个或多个行值相同,则将这些值更改为np.nan,除非相同值等于0。

如果两个或多个行值相同,则将这些值更改为np.nan,除非相同值等于0。
EN

Stack Overflow用户
提问于 2020-06-30 14:46:33
回答 2查看 21关注 0票数 0

我有一个有能源使用数据的数据。为了对数据进行后处理,我需要确保我只使用可靠的能源。此处的步骤之一是确保数据行中的值不相同,因为这表明数据库中有错误(家庭的能源使用多年来几乎没有相同,除了零能源使用(由于可再生能源安装)。

在一个简单的示例df上,问题如下:

  • 数据格式可以包含空单元格(np.nan)。如果2个或多个行值相同,则保留一个

值相同,并将其余值设置为np.nan,除非相同值为零。。

在下面的示例中,第2行和第4行被替换为np.nan,但最后一行不是因为相同的值是零。

有人知道如何从最初的df到所需的df吗?除了相同值为零的条件外,这些代码不应更改为np.nan (参见df中的最后一行)。

初始df:

代码语言:javascript
复制
   y_2010  y_2011  y_2012
      4.0     6.0     3.0
      2.0     7.0     7.0
      9.0     NaN     NaN
      3.0     3.0     3.0
      2.0     4.0     6.0
      0.0     0.0     NaN

想要的df:

代码语言:javascript
复制
   y_2010  y_2011  y_2012
      4.0     6.0     3.0
      2.0     7.0     NaN
      9.0     NaN     NaN
      3.0     NaN     NaN
      2.0     4.0     6.0
      0.0     0.0     NaN

试用代码:

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({"y_2010": [4,2,9,3,2,0],
                   "y_2011": [6,7,np.nan,3,4,0],
                   "y_2012": [3,7,np.nan,3,6,np.nan]})
print(df)

mask = df.apply(pd.Series.duplicated, 1)
df = df.mask(mask, np.nan)

print(df)

   y_2010  y_2011  y_2012
      4.0     6.0     3.0
      2.0     7.0     NaN
      9.0     NaN     NaN
      3.0     NaN     NaN
      2.0     4.0     6.0
      0.0     NaN     NaN  -> 0 changed to NaN and I don't want that
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-30 14:48:48

让我们尝试添加0检查

代码语言:javascript
复制
df = df.mask(df.apply(pd.Series.duplicated, 1) & df.ne(0))
   y_2010  y_2011  y_2012
0     4.0     6.0     3.0
1     2.0     7.0     NaN
2     9.0     NaN     NaN
3     3.0     NaN     NaN
4     2.0     4.0     6.0
5     0.0     0.0     NaN
票数 1
EN

Stack Overflow用户

发布于 2020-06-30 14:52:14

你可以试试:

代码语言:javascript
复制
df.apply(lambda x: x.mask(x.duplicated()&x.ne(0)), axis=1)

输出:

代码语言:javascript
复制
   y_2010  y_2011  y_2012
0     4.0     6.0     3.0
1     2.0     7.0     NaN
2     9.0     NaN     NaN
3     3.0     NaN     NaN
4     2.0     4.0     6.0
5     0.0     0.0     NaN
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62660145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档