Python 熊猫:如何根据多列的条件将值替换为np.nan
这是我的数据框Python 熊猫:如何根据多列的条件将值替换为np.nan,python,arrays,pandas,replace,Python,Arrays,Pandas,Replace,这是我的数据框 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中的if值,并将其替换为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
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中的if值,并将其替换为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])
对于下面的代码,运行良好。
但是有很多列,所以我想用list和for句子
df['D'] = np.where(df.A == 0, np.nan, df.D)
与as一起使用:
首先,我们使用
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
让我们做吧
df.loc[:,'D':].mask(df.loc[:,'A':'C'].eq(0).values)
D E F
0 T F NaN
1 NaN X J
2 G G NaN
df.loc[:,'D':]= df.loc[:,'D':].mask(df.loc[:,'A':'C'].eq(0).values)
对于zip中的x,y(列表1,列表2):df[y]=df[y]。其中(df[x]!=0)
?
df.loc[:,'D':].mask(df.loc[:,'A':'C'].eq(0).values)
D E F
0 T F NaN
1 NaN X J
2 G G NaN
df.loc[:,'D':]= df.loc[:,'D':].mask(df.loc[:,'A':'C'].eq(0).values)