Python 应用将列表返回到更多列的函数
我有一个函数,它在某种条件下对字符串执行修改,然后返回一个包含修改后的字符串的列表,并在获得新字符串时进行布尔检查。 我想将func应用于dataframe列,并将结果存储在两个新创建的列中。我找到了一个不雅观的方法来达到这个目的: 主要方法是:Python 应用将列表返回到更多列的函数,python,pandas,Python,Pandas,我有一个函数,它在某种条件下对字符串执行修改,然后返回一个包含修改后的字符串的列表,并在获得新字符串时进行布尔检查。 我想将func应用于dataframe列,并将结果存储在两个新创建的列中。我找到了一个不雅观的方法来达到这个目的: 主要方法是: def alter_string(astring): ... return altered_string, boolean_check def _perform_mod(astring): return alter_string(astr
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。我需要向dataframe添加两个新列,modified_string
和check
这里是一个简短的示例
original ---> modified check
AAAAAA -----> AAAAAA False
AAABCD -----> AAAVCD True
ACCBDE -----> AACADE True
`试试这个:
df['modified'], df['check'] = zip(*df['original'].apply(alter_string))
这样您只需运行一次alter\u string
函数
zip
函数创建一个元组列表,其中每个元组都是一个系列。
然后通过元组解包(df['modified'],df['check']
),我们在dataframe中创建了全新的列
基于请向我们提供一些示例数据,然后提供您的预期输出,以便我们可以提供任何替代方案,目前我们不知道您的代码的具体用途。谢谢您正是我要找的。工作完美无瑕。我知道zip函数。你能解释一下*运算符前面的列名吗?它与熊猫有关吗?@MicheleMontaruli“”纯粹是一个Python核心功能,在这里用于解压zip函数的参数。作为一个示例,这里它用于将apply中的每个结果元组(例如tuples“(AAAAAA,False)”和“(AAAVCD,True)”作为不同的参数进行压缩。因此,如果apply的结果是元组“(aaaaa,False)”和“(AAAVCD,True)”,其中“基本上是这样调用zip:
zip((AAAAAA,False),(AAAVCD,True))
。更好地使用此功能以完全掌握它)