如何串行合并成一个使用大熊猫表或如何使用python在一个句子连接一列的不同行?

问题描述 投票:0回答:2

输入:

LineNo  word_num    left    top  width  text
1       1           322     14   14     My
1       2           304     4    41     Name
1       3           322     5    9      is
1       4           316     14   20     Raghav
2       1           420     129  34     Problem 
2       2           420     31   27     just
2       3           420     159  27     got
2       4           431     2    38     complicated
1       1           322     14   14     #40
1       2           304     4    41     @gmail.com   
2       1           420     129  34     2019 
2       2           420     31   27     January

正如你可以看到有列lineNo的,左侧,顶部和word_num,所以我是想,如果我可以用这些既也许我可以实现我的解决方案得到一些逻辑。

我想要做一些调整输出,实际上这个输出是通过转换为图像的后一个PDF到来,所以它正在迎头赶上整条生产线,因为它的整条生产线即将到来,输出没了感觉,我是什么现在做的思考是组中的意义全方式的文本。对于e.g可以说,这个输出我正在使用此获得:

G = DF [ 'line_num']。NE(DF [ 'line_num']。位移())。cumsum()OUT = '\ n'.join(df.groupby(克)[' 文本 ']。AGG(' ”。加入))打印(下)

输出=

“我的名字是RAGHAV#4015 gmail.com

问题刚刚复杂$ 2019年1月。”

预期输出=

“我的名字是RAGHAV

*40

@ gmail.com

问题刚刚复杂

2019 1月。”

所有在不同的线路,无论它们是否在同一行或没有,但在不同的线路逻辑分组。

在我的理解,也许我们可以通过执行以下步骤实现这一点:如果enter image description here一)字样的同一行进行分组距离x <门槛

b)关于下一行字被与先前如果y距离<阈分组

阈值是宽度(图像)/ 100;距离x是从左侧计算; ÿ距离是从顶部计算。

我们能做到这一点?让我知道如果这个问题不够清晰!谢谢!

增加了图像我试图得到输出,它的数据有点复杂,这个我根据我改变了它!

python string pandas split concatenation
2个回答
0
投票

使用双join - 与agg,然后输出Series

out = '.....'.join(df.groupby('LineNo')['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242

str.cat另一种解决方案:

out = df.groupby('LineNo')['text'].agg(' '.join).str.cat(sep='.....')

编辑:

g = df['LineNo'].ne(df['LineNo'].shift()).cumsum()
out = '.....'.join(df.groupby(g)['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242.....hello the problem just.....got more complicated !!!!

1
投票

要回答你的第二个问题,也许尝试通过柱像这样的迭代。

phrase = ""

for i in range(0, df.count):
    if type(df.iat[i, 'text']) == str:
        phrase = phrase + " " + df.iat[i, 'text']

要添加的空间/ ...,我同意jezrael,使用str.cat方法。

© www.soinside.com 2019 - 2024. All rights reserved.