我有一个函数,可以在某些情况下对字符串进行修改,而不是返回包含修改后的字符串的列表和布尔检查是否获得新字符串。 我想将func应用于pandas dataframe列,并将结果存储在两个新创建的列中。我找到了实现此目的的巧妙方法:
主要方法是:
def alter_string(astring):
...
return altered_string, boolean_check
def _perform_mod(astring):
return alter_string(astring)[0]
def _check():
return alter_string(astring)[1]
df['modified']=df['original'].apply(_perform_mod)
df['check']=df['original'].apply(_check)
通过这种方式,我实现了目标,但是我必须运行两次繁重的计算方法。我想知道是否有更好的方法
添加一些细节以澄清我的问题
我有一个数据框列'original_string'
,其中包含作为分子描述符的字符串,我将此字符串应用了在某些情况下可以修改或不修改字符串的函数。该函数返回修改后的字符串和True或相同的字符串和False。我需要向数据框添加两个新列,modified_string
和check
,这里是一个简短的示例
original ---> modified check
AAAAAA -----> AAAAAA False
AAABCD -----> AAAVCD True
ACCBDE -----> AACADE True
`
答案 0 :(得分:1)
尝试一下:
df['modified'], df['check'] = zip(*df['original'].apply(alter_string))
这样,您只运行一次alter_string
函数。
zip
函数创建一个元组列表,其中每个元组都是一个序列。
然后,通过元组解包(df['modified'], df['check']
),我们在数据框中创建全新的列。