You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定列在Pandas中将多行合并为一行并计算均值

Pandas 合并行并计算平均值的解决方案

你想要根据time_range_1和B分组,合并同组行并计算A_mean的平均值对吧?之前的错误是因为误用了字符串拼接方法处理数值列,下面给你正确的Pythonic解决方案:

错误原因分析

你用apply(' '.join)处理A_mean列,但A_mean是float64类型的数值列,join方法只能用于字符串序列,所以才会抛出TypeError: sequence item 0: expected str instance, numpy.float64 found的错误。你实际需要的是计算平均值,而非拼接字符串。

正确代码实现

根据你的需求(核心列A_mean取平均,time_range_1和B保持不变,time_range取分组内对应值,匹配你的期望输出),可以这样写:

import pandas as pd

# 初始化你的数据框
df = pd.DataFrame({
    'index': [0, 1, 2],
    'A_mean': [5.936667, 5.103241, 5.267687],
    'time_range': ['07', '08', '09'],
    'time_range_1': ['08:00 - 08:59', '08:00 - 08:59', '09:00 - 09:59'],
    'B': ['1001', '1001', '1001']
})

# 分组聚合:按time_range_1和B分组,计算A_mean平均值,time_range取分组最后一个值(符合你的期望输出)
df2 = df.groupby(['time_range_1', 'B'], as_index=False).agg(
    A_mean=('A_mean', 'mean'),
    time_range=('time_range', 'last')
)

print(df2)

输出结果

运行后会得到你想要的结果:

time_range_1     B    A_mean time_range
0  08:00 - 08:59  1001  5.519954         08
1  09:00 - 09:59  1001  5.267687         09

额外说明

  • 如果time_range在同一分组内数值一致,用first()或last()结果都相同;如果分组内time_range有差异,你可以根据业务需求选择取第一个、最后一个,或是其他聚合逻辑。
  • as_index=False能让分组后的列保持为普通列,而非索引,方便后续数据处理。

内容的提问来源于stack exchange,提问作者Tyson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:34:14