首页 > 解决方案 > python pandas数据框:将函数返回元组分配给数据框的两列

问题描述

我想Dataframe使用这样的函数向熊猫添加两列tuple

data=pd.DataFrame({'a':[1,2,3,4,5,6],'b':['ssdfsdf','bbbbbb','cccccccccccc','ddd','eeeeee','ffffff']})

def givetup(string):
    
    result1 = string[0:3]
    # please imagine here a bunch of string functions concatenated.
    # including nlp methods with SpaCy 
    result2 = result1.upper()
    # the same here, imagine a bunch of steps to calculate result2 based on result 1
    
    return (result1,result2)

data['c'] = data['b'].apply(lambda x: givetup(x)[0])
data['d'] = data['b'].apply(lambda x: givetup(x)[1])

这是非常低效的(我正在处理数百万行),因为我调用了两次相同的函数并进行了两次计算。由于result2取决于result 1我最好不要givetup分成两个函数我怎样才能一次分配result1result2进入新列cd只调用一次函数?最有效的方法是什么?

请记住,result1字符串result2计算非常耗时。

编辑 1: 我知道这一点: Apply pandas function to column to create multiple new columns?

即应用矢量化函数。在我的特殊情况下,这是非常不可取的,甚至是不可能的。想象一下结果 1 和结果 2 是根据语言模型计算的,我需要纯文本。

标签: pythonpandasperformanceapplyassign

解决方案


您可以在此处尝试列表理解:

data[['c','d']] = [givetup(a) for a in data['b']]

输出:

   a             b    c    d
0  1       ssdfsdf  ssd  SSD
1  2        bbbbbb  bbb  BBB
2  3  cccccccccccc  ccc  CCC
3  4           ddd  ddd  DDD
4  5        eeeeee  eee  EEE
5  6        ffffff  fff  FFF

推荐阅读