Python Pandas在一列中替换nan,取决于另一列中的观察

时间:2014-09-10 10:46:27

标签: python-2.7 pandas

我在python pandas中有以下数据框:

current_data = pd.DataFrame({'X': ['3'+'*NY', '3', '2', '2'+'*NY', '1', '7'], 'Y': [np.nan, 4, 5, np.nan, 8, np.nan]})

我想得到的是:

needed_data = pd.DataFrame({'X': ['3'+'*NY', '3', '2', '2'+'*NY', '1', '7'], 'Y': [4, 4, 5, 5, 8, np.nan]})

所以,我想在Y列中替换对应于X中的观察的" * NY"部分,Y中的数字对应于X中具有相同数字部分但没有" * NY"

1 个答案:

答案 0 :(得分:1)

这对代码来说有点烦人,基本上我们可以应用一个为你执行查找的自定义函数:

In [106]:
# define our function
def func(x):
    # test to see if the asterisk is present
    if x.find('*') > 0:
        # perform a lookup on a slice of the passed in string
        return(current_data.loc[current_data.X==x[0:x.find('*')],'Y'].values.max())
# using loc assign to column 'Y' where it is null the returned calculation of the apply
current_data.loc[current_data.Y.isnull(),'Y'] = current_data[current_data.Y.isnull()]['X'].apply(func)
current_data
Out[106]:
      X   Y
0  3*NY   4
1     3   4
2     2   5
3  2*NY   5
4     1   8
5     7 NaN