用lambda或其他东西替换循环以提高运行速度
我有一个可以工作的循环,但对于我的真实数据集来说,它太慢了,我基本上有一个很大的文本文件,每一行都由\n个字符分隔。
在每个独特的消息的开头都有一个独特的消息指纹,出于这个目的,我们假设它们以#开头。我将this # (Y)或not (N)的出现放在一个单独的列中,称为“开始”。
我想查找不以#开头的行,如果下面的行也不是以#开头,我想将这两行合并在一起。暂时忽略任何想要脱光的欲望,\n我已经解决了。
我的循环可以工作,但我如何使用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] = ""尝试编辑以添加示例:
消息-开始-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个不同的消息,不同的长度,我想连接文本,所以我有每条消息一行,从头到尾包含所有信息
发布于 2019-02-09 00:25:06
我想你要找的是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-您的问题已更改,我不太确定这是否对您有帮助。
https://stackoverflow.com/questions/54596372
复制相似问题