我尝试过在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
我几乎可以工作了,但我的空行被粘在了一些文本上。所以我错过了我的第一个空白行。
请有人帮我更好地制定
s
,以获得所需的输出。我也需要加入。只有在最后一句结尾并没有句号的情况下才会出现。(这并不重要。我想我可以先在非空文本句子的末尾搜索缺失的句号,然后连接句子,但我想知道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