如何基于指定列在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
相关产品推荐
相关产品推荐

