猿问

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

用 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 \n

bla bla 短信\n


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


关于别的东西的细节\n


消息开始现在 01:01:2018:12:16:78 \n

bla bla 短信类型 2 xxxxxx \n


消息开始现在 01:01:2018:12:21:05 \n

bla bla 短信类型 3 xxxxxx \n


这东西的位置详细信息\n


那东西的位置详细信息\n


我的价格详情\n


价格详情\n


很多\n


更多\n


无聊\n


文字\n


消息开始现在 01:01:2018:12:35:01 \n

bla bla 短信类型 2 xxxxxx \n


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


长风秋雁
浏览 163回答 1
1回答

慕婉清6462132

我想你要找的是 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 - 您的问题已更改,我不太确定这对您有帮助。
随时随地看视频慕课网APP

相关分类

Java
我要回答