合并熊猫中的连续行,并保留一些行不变



我尝试过在panda解决方案中查看其他合并行,尤其是这里的解决方案。

我想把从要点上刮下来的各个句子组合成一段,位于空的空白行之间。但是保持空白行原样。我想保留第一句话的段落id作为新的id。(段落id不一定是连续的,因为已经做了一些预清理。(

df = pd.DataFrame(data = [[1, "A Heading"],
[2, "I need to be with above."],
[3, ""],
[8, "I stand alone."],
[9, ""]],columns=['para_id','text'])
df   
# The data
#    para_id                      text
# 0        1                 A Heading
# 1        2  I need to be with above.
# 2        3                          
# 3        8            I stand alone.
# 4        9                         

我需要的输出是:

#    para_id                                    text
# 0        1  A Heading. I need to be with above
# 1        3  
# 2        8  I stand alone.
# 3        9   

在这些答案的帮助下,我已经很接近了,只需要多一点指导。

尝试的解决方案

df['t'] =  df['text'].str.len().values
s = df['t'].eq(0).cumsum()
out = df.groupby(s).agg({'para_id': 'first',
'text': lambda x: '. '.join(x),
't': 'last'})
out.drop('t', inplace=True, axis=1)

out
# Incorrect output
#    para_id                                 text
# t                                              
# 0        1  A Heading. I need to be with above.
# 1        3                     . I stand alone.
# 2        9

我几乎可以工作了,但我的空行被粘在了一些文本上。所以我错过了我的第一个空白行。

  1. 请有人帮我更好地制定s,以获得所需的输出。

  2. 我也需要加入。只有在最后一句结尾并没有句号的情况下才会出现。(这并不重要。我想我可以先在非空文本句子的末尾搜索缺失的句号,然后连接句子,但我想知道Panda中是否存在变异的类型的结构。(

您就快到了,只需对非零长度和cumsum:进行分组

s = df['text'].eq('')
(df.groupby([s.cumsum(),s], sort=False)
.agg({'para_id':'first', 'text': '. '.join})
.reset_index(drop=True)
)

输出:

para_id                                 text
0        1  A Heading. I need to be with above.
1        3                                     
2        8                       I stand alone.
3        9                                     

最新更新