Pandas DataFrame如何将列值按分组拼接为字符串序列
按name分组拼接sex列生成seq列的实现方案
直接用pandas分组聚合即可,会自动保留原始行的先后顺序,拼接结果完全匹配预期。
示例原始数据构造
可先运行这段代码生成和你描述一致的测试DataFrame:
import pandas as pd df = pd.DataFrame({ "name": ["ab", "ab", "ab", "bc", "bc", "bc"], "sex": ["f", "m", "f", "f", "f", "m"] })
核心实现
通用写法
适配所有字符串拼接需求:
result = df.groupby("name", as_index=False)["sex"].agg( seq=lambda s: "".join(s.tolist()) )
高性能写法(推荐大数量级使用)
用pandas内置str.cat方法,比手动join性能更优:
result = df.groupby("name", as_index=False)["sex"].agg( seq=lambda s: s.str.cat() )
输出效果
运行后得到的result输出为:
name seq 0 ab fmf 1 bc ffm
说明:pandas的
groupby默认保留组内元素在原始DataFrame中的出现顺序,拼接时不会打乱观测先后,因此结果完全匹配你要的顺序要求。
注意事项
as_index=False会让分组键name保留为普通列,不会被设置为行索引,方便后续直接调用- 如果
sex列存在空值,可在拼接前做清洗:比如填充占位符用s.fillna("-").str.cat(),剔除空值用s.dropna().str.cat()
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

