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

如何对含重复Timestamp的数值列求均值并保留非数值列首个值?

解决DataFrame分组聚合的混合需求:数值列求均值+非数值列留首值

问题背景

原始数据:

TimestampABC
19:26:012755.2Earth
19:26:012054.5Jupiter
19:26:022056.2Mars
19:26:022453.6Venus

想要得到的结果:

TimestampABC
19:26:0123.554.85Earth
19:26:022254.9Mars

使用df.groupby('Timestamp', as_index=False).mean()时触发警告:

FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.

核心需求:按Timestamp分组后,仅对数值列(A、B)求均值,同时保留非数值列(C)每组的第一个值。

三种可行方案

方案1:用agg统一指定列规则

直接通过聚合函数agg为不同类型的列设置处理逻辑,一步到位:

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'Timestamp': ['19:26:01', '19:26:01', '19:26:02', '19:26:02'],
    'A': [27, 20, 20, 24],
    'B': [55.2, 54.5, 56.2, 53.6],
    'C': ['Earth', 'Jupiter', 'Mars', 'Venus']
})

# 生成聚合规则:数值列求均值,非数值列取第一个值
agg_rules = {}
for col in df.columns:
    if col == 'Timestamp':
        continue
    if df[col].dtype in ['int64', 'float64']:
        agg_rules[col] = 'mean'
    else:
        agg_rules[col] = 'first'

# 分组聚合得到结果
result = df.groupby('Timestamp', as_index=False).agg(agg_rules)
print(result)

方案2:拆分处理再合并

把数值列和非数值列分开处理,最后合并结果,逻辑更清晰:

# 1. 处理数值列:分组求均值
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
numeric_result = df.groupby('Timestamp', as_index=False)[numeric_cols].mean()

# 2. 处理非数值列:分组取第一个值
non_numeric_cols = df.select_dtypes(exclude=['int64', 'float64']).columns
non_numeric_result = df.groupby('Timestamp', as_index=False)[non_numeric_cols].first()

# 3. 合并两个结果
result = pd.merge(numeric_result, non_numeric_result, on='Timestamp')
print(result)

方案3:先处理数值列再补非数值列

先解决mean的警告问题,再手动补充非数值列的首值:

# 先对数值列求均值,指定numeric_only=True消除警告
numeric_mean = df.groupby('Timestamp', as_index=False).mean(numeric_only=True)

# 获取非数值列的首值,去掉重复的数值列
non_numeric_first = df.groupby('Timestamp', as_index=False).first(numeric_only=False)
non_numeric_first = non_numeric_first.drop(columns=numeric_mean.columns[1:])

# 合并结果
result = pd.merge(numeric_mean, non_numeric_first, on='Timestamp')
print(result)

内容的提问来源于stack exchange,提问作者Krishna Chaitanya Vaddepally

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:32