python - 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
分成两个函数我怎样才能一次分配result1
并result2
进入新列c和d只调用一次函数?最有效的方法是什么?
请记住,result1
字符串result2
计算非常耗时。
编辑 1: 我知道这一点: Apply pandas function to column to create multiple new columns?
即应用矢量化函数。在我的特殊情况下,这是非常不可取的,甚至是不可能的。想象一下结果 1 和结果 2 是根据语言模型计算的,我需要纯文本。
解决方案
您可以在此处尝试列表理解:
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
推荐阅读
- excel - 将时间间隔从文本转换为数字并按客户时间间隔分组
- c++ - TBB paralell_for 没有正确地将一个数组中的元素复制到另一个数组中?
- python-3.x - 混淆矩阵:ValueError:分类指标无法处理未知目标和多类目标的混合
- ios - 将 xib 视图添加到情节提要上的另一个 xib 滚动视图
- python - Python3模块未在其他计算机上加载
- android - 如何在 AndroidTV 上创建带有步骤的设置菜单屏幕
- c# - 尝试将图像(按城市分类)从本地数据库加载到 flowLayoutPanel
- matlab - Matlab 在 x 轴上绘制特定点
- python - 如何使用 Discord.py 对特定用户进行 dm?
- r - 在 R 中为调查评分(循环)