在下面的代码中,如果列val sources =fileNames.map(file=>
ZipEnumerator.Source(file, { () => enumeratorToInputStream(xmlData)}))
中的对应值为1,则用空白字符串替换列NaN
中的所有b
值。
该代码有效,但是我必须两次输入a
。
有更短/更好的方法吗?
df.loc[df.a == 1, 'b']
答案 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('')