如何使用表中的pandas将字符串行组合成一行,或者如何使用python将语句中的列的不同行连接起来?

如何使用表中的pandas将字符串行组合成一行,或者如何使用python将语句中的列的不同行连接起来?,python,string,pandas,split,concatenation,Python,String,Pandas,Split,Concatenation,输入: 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

输入:

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、lefttop和word_num列,所以我尝试使用这两个列获取一些逻辑,也许我可以实现我的解决方案

我想在输出中做一些调整,实际上这个输出是在转换成图像后通过PDF来的,所以它捕捉到了整行,因为整行来了,输出没有意义,我现在想做的是以一种有意义的方式对文本进行分组。例如 让我们说一下,我使用以下方法得到的输出:

g=df['line_num'].ne(df['line_num'].shift()).cumsum() out='\n'.join(df.groupby(g)['text'].agg(''.join)) 打印(输出)

输出=

“我的名字是raghav#40@gmail.com

问题变得复杂了2019美元1月”

预期产量=

“我叫拉格哈夫

*四十

@gmail.com

问题变得复杂了

2019年1月”

无论它们是否在同一行中,它们都在不同的行中,但逻辑上分组在不同的行中

据我所知,我们可以通过以下步骤来实现: a) 如果x距离<阈值,则对同一行上的单词进行分组

b) 如果y距离<阈值,则下一行上的单词将与上一行分组

阈值为宽度(图像)/100;x距离是从左开始计算的;y距离是从顶部开始计算的

我们可以这样做吗? 如果问题不够清楚,请告诉我! 谢谢


添加了我试图获得输出的图像,其中的数据有点复杂,我已经根据自己的想法对其进行了更改

使用double
join
-与,然后用于输出
系列

out = '.....'.join(df.groupby('LineNo')['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242
另一个解决方案包括:

编辑:


要回答您的第二个问题,可以尝试像这样迭代该列

phrase = ""

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

若要添加空格/…,我同意jezrael,请使用str.cat方法。

您好,对于单页PDF,@jezrael,如果您可以帮助我使用4页PDF实现同样的效果,对于您的信息,每一页“行号”都从1开始!因此,我使用这个命令接收的输出是将所有文本与数字1连接起来,而我的要求是获得单个行的输出。可能吗?请回复@RaghavenderRohilla-是的,检查答案
EDIT
的最后一段。你能用这个命令告诉我“g=df['line\u num'].ne(df['line\u num'].shift()).cumsum()”什么是“ne”?正在搜索但无法找到?谢谢@RaghavenderRohilla-当然,是检查你的gmail@jezrael我发了一些邮件。
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 !!!!
phrase = ""

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