熊猫:如何根据多个列的条件将值替换为np.nan

紫领:

这是我的数据框。

I  A  B  C  D  E  F
1  9  4  0  T  F  F
2  0  5  1  S  X  J
3  1  8  0  G  G  J

这是我的预期输出。我要替换A中的值== 0,替换为D中的np.nan。

I  A   B   C   D   E   F
1  9   4   0   T   F   nan
2  0   5   1   nan X   J
3  1   8   0   G   G   nan

我想用A / B / C列的值替换D / E / F列的值。例如,D列根据A列而变化。(A-> D,B-> E,C-> F)

我尝试了这段代码,但没有改变值。

list1 = ['A', 'B', 'C']
list2 = ['D', 'E', 'F']

for i in list2:
    for j in list1:
        df[i] = np.where(df[j] == 0, np.nan, df[i])

对于下面的代码,运行良好。但是有很多列,所以我想使用列表和句子。

df['D'] = np.where(df.A == 0, np.nan, df.D)
Datanovice:

首先,我们使用以下两个列表创建字典 zip

replace_dict = dict(zip(list1,list2))

然后我们遍历它来处理您的作业,

for k,v in replace_dict.items():
    df.loc[df[k] == 0, v] = np.nan

print(df)
   I  A  B  C    D  E    F
0  1  9  4  0    T  F  NaN
1  2  0  5  1  NaN  X    J
2  3  1  8  0    G  G  NaN

另一种方法是np.where与您的列表一起使用

df[list2] = np.where(df[list1].eq(0), np.nan,df[list2])

print(df)

   I  A  B  C    D  E    F
0  1  9  4  0    T  F  NaN
1  2  0  5  1  NaN  X    J
2  3  1  8  0    G  G  NaN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章