Python 将dataframe列中的每个值更改为函数返回的值

Python 将dataframe列中的每个值更改为函数返回的值,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个dataframe,它包含一个包含字符串值的列。我需要用函数的结果替换该列中的每个值。我希望这样做,而不必重复数千行。函数接受一个术语并返回该术语的已批准新值 示例:getPreferredTerm('DISCOLORED')将返回'DISCOLORED',因此p_TERM列中'DISCOLORED'的值将全部替换为'DISCOLORED' 我正在努力使用numpy来实现这一点 df['P_TERM'] = getPreferredTerm(df['P_TERM']) getPrefe

我有一个dataframe,它包含一个包含字符串值的列。我需要用函数的结果替换该列中的每个值。我希望这样做,而不必重复数千行。函数接受一个术语并返回该术语的已批准新值

示例
getPreferredTerm('DISCOLORED')
将返回'DISCOLORED',因此p_TERM列中'DISCOLORED'的值将全部替换为'DISCOLORED'

我正在努力使用
numpy
来实现这一点

df['P_TERM'] = getPreferredTerm(df['P_TERM'])
getPreferredTerm函数如下所示:

def getPreferredTerm(stresc): 
    # NOTE" obsData is a dataframe containing legacy terms in a 
    # column called 'STRESC' and preferred terms in a column 
    # named 'PTERM' so this function takes a legacy term as input 
    # and returns a preferred term 
    try:    
        df = obsData.loc[(obsData['STRESC'] == stresc)].iloc[0]['P_TERM'] 
        pterm = df 
    except Exception as e:  
        pterm = 'UNMAPPED' 
    return pterm
如果我传递一个序列而不是单个值,是否可以将此函数矢量化?

用于将函数应用于序列中的每个元素:

df['P_TERM'] = df['P_TERM'].apply(getPreferredTerm)
请注意,这样的计算不会矢量化,也不会到位。Pandas将执行循环,将函数应用于序列中的每个值。然后将生成的序列分配回数据帧


如果要使用字典映射值,可以使用
pd.Series.map
。该操作由Pandas优化

d = {'STAINED': 'DISCOLORED'}
df['P_TERM'] = df['P_TERM'].map(d).fillna(df['P_TERM'])
另一种方法是使用
pd.Series.replace
,但请参见此


用于更新需求的矢量化方法:

s = obsData.drop_duplicates(subset=['STRESC']).set_index('STRESC')['P_TERM']
df['P_TERM'] = df['P_TERM'].map(s).fillna('UNMAPPED')

这会比遍历每一行更快吗?有更好的方法吗?这不会比迭代每一行更快。如果您想要矢量化方法,则需要向我们显示
getPreferredTerm
的代码,该代码可能是矢量化的,也可能不是矢量化的。def getobbsterm(stresc):#注意“obsData是一个数据帧,包含名为'STRESC'的列中的遗留术语和名为'PTERM'的列中的首选术语,因此此函数将遗留术语作为输入,并返回首选术语try:df=obsData.loc[(obsData['STRESC'==STRESC)]。iloc[0]['P\u term']pterm=df,异常情况除外,如e:pterm='unmap'返回pterm@summersmd,很抱歉,我无法阅读您评论中的代码。如果您需要提供更多数据/代码,请回答您的问题。@summersmd,请参阅更新。您尚未提供具有预期输出的数据,因此我无法测试这是否是您想要的。