这是我的数据框。
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)
最佳答案
首先,我们使用 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
关于python - Pandas:如何根据多列的条件将值替换为 np.nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61471124/