我的数据框df
有两列A
和B
。某些行的A
为NaN。我想根据NaN
列中的值将函数应用于A
中B
行的行。
我尝试过类似的事情:
df.loc[df['A'].isnull(), 'A']=df['B'].apply(lambda x: func(x))
。我知道它不起作用,但无法找到正确的方法。
答案 0 :(得分:1)
#This should work.
df['A'] = df.apply(lambda x: func(x.B) if np.isnan(x.A) else x.A, axis=1)
<强>设置强>
df=pd.DataFrame({'A': {0: 1.0, 1: 1.0, 2: np.nan, 3: np.nan, 4: np.nan, 5: 1.0, 6: 1.0, 7: 1.0},
'B': {0: 1, 1: 1, 2: 1, 3: 20, 4: 20, 5: 300, 6: 300, 7: 20}})
Out[765]:
A B
0 1.0 1
1 1.0 1
2 NaN 1
3 NaN 20
4 NaN 20
5 1.0 300
6 1.0 300
7 1.0 20
def func(x):
return x*x
<强>解决方案强>
#check d.A for nan inside the lambda can call the function only when d.A is nan.
df['A'] = df.apply(lambda x: func(x.B) if np.isnan(x.A) else x.A, axis=1)
df
Out[769]:
A B
0 1.0 1
1 1.0 1
2 1.0 1
3 400.0 20
4 400.0 20
5 1.0 300
6 1.0 300
7 1.0 20
答案 1 :(得分:1)
IIUC你可以这样做:
df.loc[df['A'].isnull(), 'A'] = df.loc[df['A'].isnull(), 'B'].map(func)