为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除 Python 中的慢循环并改用 Lambda 或其他东西

如何删除 Python 中的慢循环并改用 Lambda 或其他东西

长风秋雁 2021-11-02 19:07:04
用 lambda 或其他东西替换循环以提高运行速度我有一个有效的循环,但是对于我的真实数据集,它会太慢我基本上有一个巨大的文本文件,每行由 \n 字符分隔。每个独特消息的开头都有一个独特的消息指纹,为此,假设它们以 # 开头。我已经把这个 # (Y) 或不出现 (N) 放在一个单独的列中,称为“开始”我想查找不以 # 开头的行,如果下面的行也不以 # 开头,我想将两者连接起来。暂时忽略去除 \ns 的任何愿望,我已经涵盖了这一点。我的循环有效,但我如何使用 lambda 函数或任何其他方式来获得良好的加速?非常感谢提前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] = ""尝试编辑以添加示例:消息开始现在 01:01:2018:12:15:28 \nbla bla 短信\n有关问题位置的详细信息\n关于别的东西的细节\n消息开始现在 01:01:2018:12:16:78 \nbla bla 短信类型 2 xxxxxx \n消息开始现在 01:01:2018:12:21:05 \nbla bla 短信类型 3 xxxxxx \n这东西的位置详细信息\n那东西的位置详细信息\n我的价格详情\n价格详情\n很多\n更多\n无聊\n文字\n消息开始现在 01:01:2018:12:35:01 \nbla bla 短信类型 2 xxxxxx \n所以上面是 4 条不同的消息,不同的长度,我想连接文本,所以每条消息都有一行,其中包含从头到尾的所有信息
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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


例如,您可以使用以下内容替换迭代和 if 语句:


df[(df['Beginning'] == df['Beginning'].shift(1)) & (df['Beginning'] == 'N')]

或(我实际上会做什么)


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 - 您的问题已更改,我不太确定这对您有帮助。


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号