如何在DataFrame中按索引分组并拼接行字符串?
解决按索引分组拼接字符串的问题
问题原因
你用transform方法的核心问题是:它会把分组聚合后的结果广播回原DataFrame的每一行,所以最终行数和原数据完全一致,无法得到每个索引组只保留一行的聚合结果。
正确解决方案
要实现按索引分组拼接字符串,需要使用聚合类方法,以下是两种常用方式:
方法1:groupby + agg(简洁高效)
直接指定拼接规则,可自定义分隔符:
# 用空格分隔拼接,匹配你示例的第一行结果 result = df.groupby(df.index)['text'].agg(' '.join).to_frame() # 如果需要无分隔符拼接(如示例第二行的"red is blue.blue is red"),改用空字符串: # result = df.groupby(df.index)['text'].agg(''.join).to_frame()
方法2:groupby + apply + str.cat
适合更复杂的拼接场景,灵活性更高:
# 空格分隔拼接 result = df.groupby(df.index)['text'].apply(lambda x: x.str.cat(sep=' ')).to_frame() # 无分隔符拼接 # result = df.groupby(df.index)['text'].apply(lambda x: x.str.cat(sep='')).to_frame()
结果说明
执行上述代码后,会生成你需要的DataFrame结构:每个索引对应一行,该行内容是该索引下所有text字符串的拼接结果。
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

