基于criteri的单列数据合并

2024-04-30 02:44:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含大量数据的数据框,如下所示:

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

Tags: 数据结尾colmattjohntempfail产量
3条回答

你可以试试这个:

(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

因为数据是包装的(我假设你在那里看到这个“\”,所以它是同一个单元格的一部分。那就是一个逗号分隔的数字。你知道吗

df.columnnamehere.str.split(',').str.join(sep='')

或者如果“\”是一个实际的字符,而不仅仅用于格式化

df.columnnamehere.str.split(',\').str.join(sep='')

我认为在将数据加载到DataFrame之前(或何时)处理这个比较好。但如果你坚持这样做,试试这个:

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

相关问题 更多 >