根据另一个系列中的值替换系列中的值的简便方法?

时间:2019-05-29 08:20:43

标签: python pandas

在下面的代码中,如果列val sources =fileNames.map(file=> ZipEnumerator.Source(file, { () => enumeratorToInputStream(xmlData)})) 中的对应值为1,则用空白字符串替换列NaN中的所有b值。

该代码有效,但是我必须两次输入a

有更短/更好的方法吗?

df.loc[df.a == 1, 'b']

3 个答案:

答案 0 :(得分:1)

如何使用numpy where子句检查a和b中的值并进行替换?参见下面的样机。我已经使用“ c”列进行了说明

import pandas as pd
import numpy as np
df = pd.DataFrame({
        'a': [1, None, 3],
        'b': [None, 5, 6],
    })
#replace b value if the corresponding value in column a is 1 and column b is NaN
df['c'] = np.where(((df['a'] == 1) & (df['b'].isna())), df['a'], df['b'])
df

原始数据框

     a  b
0   1.0 1.0
1   NaN 5.0
2   3.0 6.0

结果:

      a b   c
0   1.0 NaN 1.0
1   NaN 5.0 5.0
2   3.0 6.0 6.0

答案 1 :(得分:1)

  

使用where()一行即可完成

import numpy as np

df['b'] = np.where((df['b'].isnull()) & (df['a']==1),'',df['a'])

答案 2 :(得分:0)

仅将Series.fillna用于按条件匹配的值:

df.loc[df.a == 1, 'b'] = df['b'].fillna('')