我在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"
答案 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