如何在Pandas DataFrame中按换行符拼接多列内容?
解决方案
要实现按换行对应的分段拼接三列内容,需先将每个单元格的字符串按换行符拆分,再逐段对应拼接后重新用换行符连接,以下是两种可行方法:
方法一:使用apply配合列表推导式
cols = ['col1', 'col2', 'col3'] df['DesiredCol'] = df[cols].apply( lambda row: '\n'.join([' '.join(items) for items in zip(*[s.split('\n') for s in row])]), axis=1 )
代码说明
[s.split('\n') for s in row]:将当前行的每一列字符串按换行符拆分为列表,得到三个包含分段内容的列表。zip(*[...]):将三个列表按索引一一配对,生成如('ABC1', 'A', 'YES')这样的元组,对应每一行的分段组合。' '.join(items):将每个元组内的三个元素用空格拼接为单个字符串。'\n'.join([...]):把所有拼接好的分段字符串用换行符连接,得到目标格式的内容。
方法二:向量化处理(适合大数据集)
如果数据集规模较大,推荐用向量化操作替代apply,执行效率更高:
# 将每一列按换行符拆分为多列 df_expanded = df[cols].apply(lambda x: x.str.split('\n', expand=True)) # 按分段位置拼接对应列,再合并为带换行的字符串 df['DesiredCol'] = df_expanded.apply( lambda row: '\n'.join([' '.join(row[i::3]) for i in range(3)]), axis=1 )
最终效果
处理后df['DesiredCol']的内容如下:
- 第一行:
ABC1 A YES ABC2 B NO ABC3 C YES
- 第二行:
BBC1 A NO BBC2 B NO BBC3 C YES
内容的提问来源于stack exchange,提问作者Arun Menon
相关产品推荐
相关产品推荐

