我有一个pandas数据框,其中包含大量数据,如下所示:
temp_col
matt
joes\crabshack\one23
fail
joe:123,\
12345678,\
92313456,\
12341239123432,\
1321143
john
jacob
joe(x):543,\
9876544123,\
1234
如何获取所有以",\"结尾的数据?剩下的一行没有一个并将它们合并成一行?
预期产出:
temp_col
matt
joes\crabshack\one23
fail
joe:1231234567892313456123412391234321321143
john
jacob
joe(x):54398765441231234
答案 0 :(得分:1)
你可以试试这个:
(df.temp_col.groupby((~df.temp_col.str.contains(r",\\$")).shift().fillna(True).cumsum())
.apply(lambda x: "".join(x.str.rstrip(r",\\"))))
#temp_col
#1 matt
#2 joes\crabshack\one23
#3 fail
#4 joe:1231234567892313456123412391234321321143
#5 john
#6 jacob
#7 joe(x):54398765441231234
#Name: temp_col, dtype: object
分解:
1)创建一个组变量,当元素不以,\
结尾时生成一个新组:
g = (~df.temp_col.str.contains(r",\\$")).shift().fillna(True).cumsum()
g
#0 1
#1 2
#2 3
#3 4
#4 4
#5 4
#6 4
#7 4
#8 5
#9 6
#10 7
#11 7
#12 7
#Name: temp_col, dtype: int64
2)定义一个join
函数,用于删除结束逗号和反斜杠;
join_clean = lambda x: "".join(x.str.rstrip(r",\\"))
3)将join函数应用于每个组以连接以,\
结尾的连续行:
df.temp_col.groupby(g).apply(join_clean)
#temp_col
#1 matt
#2 joes\crabshack\one23
#3 fail
#4 joe:1231234567892313456123412391234321321143
#5 john
#6 jacob
#7 joe(x):54398765441231234
#Name: temp_col, dtype: object
答案 1 :(得分:0)
由于数据被包装(我假设你看到了这个' \'因此它是同一个单元格的一部分。那么它只是一个逗号分隔号码。
df.columnnamehere.str.split(',').str.join(sep='')
或者如果' \'是一个不仅仅用于格式化的实际角色
df.columnnamehere.str.split(',\').str.join(sep='')
答案 2 :(得分:0)
from pandas import DataFrame
df = DataFrame({'x': [
'matt',
'joes\crabshack\one23',
'fail',
'joe:123,\\',
'12345678,\\',
'92313456,\\',
'12341239123432,\\',
'1321143',
'john',
'jacob',
'joe(x):543,\\',
'9876544123,\\'
'1234']})
df['g'] = (1 - df['x'].str.endswith('\\').astype(int).shift().fillna(0)).cumsum()
df = df.groupby('g')['x'].sum().apply(lambda x: x.replace('\\', ''))
df