我有一个有能源使用数据的数据。为了对数据进行后处理,我需要确保我只使用可靠的能源。此处的步骤之一是确保数据行中的值不相同,因为这表明数据库中有错误(家庭的能源使用多年来几乎没有相同,除了零能源使用(由于可再生能源安装)。
在一个简单的示例df上,问题如下:
值相同,并将其余值设置为np.nan,除非相同值为零。。
在下面的示例中,第2行和第4行被替换为np.nan,但最后一行不是因为相同的值是零。
有人知道如何从最初的df到所需的df吗?除了相同值为零的条件外,这些代码不应更改为np.nan (参见df中的最后一行)。
初始df:
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:
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试用代码:
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发布于 2020-06-30 14:48:48
让我们尝试添加0检查
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发布于 2020-06-30 14:52:14
你可以试试:
df.apply(lambda x: x.mask(x.duplicated()&x.ne(0)), axis=1)输出:
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 NaNhttps://stackoverflow.com/questions/62660145
复制相似问题