首页 > 解决方案 > 熊猫应用将列表返回到更多列的函数

问题描述

我有一个对字符串执行修改的函数,在某些条件下,它会返回一个包含修改后的字符串的列表,以及是否获得新字符串的布尔检查。我想将 func 应用于 pandas 数据框列并将结果存储在两个新创建的列中。我找到了一种不优雅的方式来实现这个目的:

主要方法是:

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

`

标签: pythonpandas

解决方案


尝试这个:

df['modified'], df['check'] =  zip(*df['original'].apply(alter_string))

这样你alter_string只运行一次函数。

zip函数创建一个元组列表,其中每个元组都是一个系列。然后通过元组解包(df['modified'], df['check']),我们在数据框中创建了全新的列。

基于这个答案


推荐阅读