如何基于id与time列值匹配对DataFrame行分组合并?
解决方案:按id和time分组合并行
我明白你想做的事啦——把id和time完全匹配的行合并,同时把number和title列的对应值用空格拼接在一起对吧?之前用groupby没成功大概率是没选对合适的聚合方式,下面是具体的实现代码:
首先,我们用groupby指定分组键为id和time,然后对number和title列使用字符串拼接的聚合逻辑,最后调整列顺序和索引就能得到你想要的结果:
import pandas as pd # 构造你的原始DataFrame df = pd.DataFrame({ 'number': [10, 11], 'title': ['aa', 'bb'], 'id': [100, 100], 'time': ['02.05.2018 04', '02.05.2018 04'] }) # 分组并聚合:将同组的number、title用空格拼接 merged_df = df.groupby(['id', 'time']).agg( number=('number', lambda x: ' '.join(x.astype(str))), title=('title', lambda x: ' '.join(x.astype(str))) ).reset_index() # 调整列顺序,和你期望的输出一致 merged_df = merged_df[['number', 'title', 'id', 'time']] print(merged_df)
代码说明:
groupby(['id', 'time']):确保所有id和time完全相同的行被分到同一组agg方法里的lambda函数:因为number是数值类型,先转成字符串再用空格拼接;title本身是字符串,直接拼接即可reset_index():把id和time从分组索引变回普通列- 最后调整列顺序,让结果和你给出的期望输出列顺序一致
运行这段代码后,输出结果为:
number title id time 0 10 11 aa bb 100 02.05.2018 04
如果后续有更多行需要合并(比如同一id和time下有3个number值),这个方法也能自动把所有对应值拼接在一起,非常灵活。
内容的提问来源于stack exchange,提问作者Bharat Sharma
相关产品推荐
相关产品推荐

