使用
Series.str.startswith
具有
Series.cumsum
对于组,然后按
GroupBy.agg
具有
join
:
df1 = (df['col'].groupby(df['col'].str.startswith('SRV').cumsum())
.agg(' '.join)
.reset_index(drop=True)
.to_frame(name='new'))
print (df1)
new
0 SRV: this is for bryan
1 SRV: this is for terry
2 SRV: this is for torain sec01: This is reserve...
3 SRV: this is for Jun
细节
:
print (df['col'].str.startswith('SRV').cumsum())
0 1
1 2
2 3
3 3
4 3
5 3
6 4
Name: col, dtype: int32
为了
DataFrame
用途:
import pandas as pd
temp=u"""col
SRV: this is for bryan
SRV: this is for terry
SRV: this is for torain
sec01: This is reserved
sec02: This is open for all
sec03: Closed!
SRV: this is for Jun"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="|")
print (df)
col
0 SRV: this is for bryan
1 SRV: this is for terry
2 SRV: this is for torain
3 sec01: This is reserved
4 sec02: This is open for all
5 sec03: Closed!
6 SRV: this is for Jun
纯python解决方案:
out = []
with open("file.csv") as f1:
last = 0
for i, line in enumerate(f1.readlines()):
if line.strip().startswith('SRV'):
last = i
out.append([line.strip(), last])
from itertools import groupby
from operator import itemgetter
with open("out_file.csv", "w") as f2:
groups = groupby(out, key=itemgetter(1))
for _, g in groups:
gg = list(g)
h = ' '.join(list(map(itemgetter(0), gg)))
f2.write('\n' + h)