我曾嘗試在此處和此處查看Pandas 解決方案中的其他合并行,尤其是此處的解決方案。
我想將從專案符號中刮下的單個句子合并到空白行之間的一個段落中。但是保持空白行不變。我想保留第一句的段落 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更好地制定以獲得所需的輸出。我也需要加入。只有在最后一句結尾沒有句號時才會發生。(這并不重要。我想我可以先在非空文本句子的末尾搜索缺少的句號,然后加入句子,但我想知道 Pandas 中是否存在變異結構。)
uj5u.com熱心網友回復:
你快到了,只需對非零長度和 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366355.html
