python - Pandas:如何根据多列的条件将值替换为 np.nan

标签 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,我想替换为 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/

相关文章:

python - 如何实现 Django View 之间的消息传递?

java - 将 .txt 文件读入二维数组列表

Python - 滚动窗口OLS回归估计

python - 组时间序列

python - 如何在 pandas df 中获取不同的行并将重复的项目合并到列中?

javascript - 在V8发动机中直接使用1/0

python - Pandas:使用基于不同 DF 的自定义列创建 DF

python - 如何使用预训练模型的第一层提取 Keras 模型内的特征(函数式 API)

javascript - 如何计算数组值之间的差异,然后对它们进行平均?

python - 基于多个条件处理 numpy 数组的更有效方法是什么?