如何在Pandas中不使用group by拼接DataFrame某列的所有行
Pandas将DataFrame某列所有行用'|'拼接的正确方法
问题场景
需要将DataFrame中value列的所有值用|连接成单个字符串,原始DataFrame定义如下:
import pandas as pd data = [{'body': 'Sahil', 'value': 'A123.456.234 '}, {'body': 'Goyal', 'value': 'A124.457.235 '} ] df = pd.DataFrame(data)
错误代码分析
你尝试的两种方法都无法得到预期结果,原因如下:
df['value'].apply(lambda x: "|".join(x)):该代码会对每个字符串元素执行join操作,把单个字符串的每个字符用|分隔,输出的是拆分后的字符序列,而非列值拼接结果。df.agg({"value": "|".join}):该代码返回的是一个Series对象(索引为value,值为拼接后的字符串),而非直接返回目标字符串。
正确实现方法
方法1:直接使用字符串join(最简洁)
直接将value列作为可迭代对象传入str.join:
result = '|'.join(df['value']) print(result) # 输出: A123.456.234 |A124.457.235
如果需要去除每个值末尾的空格,可以先对列做清洗:
result = '|'.join(df['value'].str.strip()) print(result) # 输出: A123.456.234|A124.457.235
方法2:使用agg并提取结果
如果想用聚合函数实现,可直接对value列调用agg,或从聚合后的Series中提取目标值:
# 方式1:直接对列调用agg result = df['value'].agg('|'.join) # 方式2:从agg返回的Series中提取 result = df.agg({"value": "|".join})['value'] print(result) # 输出: A123.456.234 |A124.457.235
内容的提问来源于stack exchange,提问作者SAGY
相关产品推荐
相关产品推荐

