首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除Python中的慢循环并使用Lambda或其他工具

问如何删除Python中的慢循环并使用Lambda或其他工具
EN

Stack Overflow用户
提问于 2019-02-09 00:16:13
回答 1查看 157关注 0票数 1

用lambda或其他东西替换循环以提高运行速度

我有一个可以工作的循环,但对于我的真实数据集来说,它太慢了,我基本上有一个很大的文本文件,每一行都由\n个字符分隔。

在每个独特的消息的开头都有一个独特的消息指纹,出于这个目的,我们假设它们以#开头。我将this # (Y)或not (N)的出现放在一个单独的列中,称为“开始”。

我想查找不以#开头的行,如果下面的行也不是以#开头,我想将这两行合并在一起。暂时忽略任何想要脱光的欲望,\n我已经解决了。

我的循环可以工作,但我如何使用lambda函数或任何其他方式来获得良好的速度?

提前致谢

代码语言:javascript
复制
for i in range(2,(len(df)-1)):
    if ((df['Beginning'][i] == 'N') and (df['Beginning'][i+1] == 'N')):
        df['Message'][i] = df['Message'][i]  +  df['Message'][i+1]
        df['Message'][i+1] = ""

尝试编辑以添加示例:

消息-开始-now 01:01:2018:12:15:28 \n

bla bla文本消息\n

有关问题位置的详细信息\n

有关其他内容的详细信息\n

Message-begins-now 01:01:2018:12:16:78 \n

bla bla文本消息类型2 xxxxxx \n

消息-开始-now 01:01:2018:12:21:05 \n

bla bla文本消息类型3 xxxxxx \n

此项目的位置详细信息\n

该对象的位置详细信息\n

我的价格详细信息\n

价格明细\n

批次\n

更多\n

无聊\n

文本\n

Message-begins-now 01:01:2018:12:35:01 \n

bla bla文本消息类型2 xxxxxx \n

所以上面是4个不同的消息,不同的长度,我想连接文本,所以我有每条消息一行,从头到尾包含所有信息

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-09 00:25:06

我想你要找的是df.shift()

例如,您可以将迭代和if语句替换为如下所示:

代码语言:javascript
复制
df[(df['Beginning'] == df['Beginning'].shift(1)) & (df['Beginning'] == 'N')]

或者(我实际上会做什么)

代码语言:javascript
复制
mask = (df['Beginning'] == df['Beginning'].shift(1)) & (df['Beginning'] == 'N')

df.loc[mask, 'Message'] = df.loc[mask, 'Message'] + df.loc[mask, 'Message'].shift(1)  # you'd have to check that this is what you want, perhaps you need to shift the mask rather than the df, i'm not sure

编辑:哦,打字错误

编辑2-您的问题已更改,我不太确定这是否对您有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54596372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档