Python Dataframe - 对选定的行和列应用函数

时间:2017-05-13 03:16:00

标签: python pandas dataframe

我的数据框df有两列AB。某些行的A为NaN。我想根据NaN列中的值将函数应用于AB行的行。

我尝试过类似的事情:

df.loc[df['A'].isnull(), 'A']=df['B'].apply(lambda x: func(x))。我知道它不起作用,但无法找到正确的方法。

2 个答案:

答案 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)