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

如何按多列日期的唯一值分组计算DataFrame的价格均值?

解决方案

步骤1:构造示例DataFrame(可跳过,直接用你的数据)

如果需要复现示例数据,先运行这段代码:

import pandas as pd

data = {
    'Price': [10, 18, 67, 23, 38, 41],
    'Date.1': ['10/22/22', '8/1/22', '8/1/22', '10/11/22', '10/22/22', '6/7/22'],
    'Date.2': ['11/23/22', '10/22/22', '11/23/22', '10/22/22', '11/23/22', None],
    'Date.3': ['12/31/22', None, None, None, '12/31/22', None]
}
df = pd.DataFrame(data, index=range(1,7))

步骤2:转换数据格式并计算均值

核心是把多列日期转换成日期-价格的一对一关联格式,再分组计算:

# 筛选所有日期列(列名含Date的列)
date_columns = [col for col in df.columns if 'Date' in col]

# 把原索引转为行号列,方便后续查看对应行
df = df.reset_index().rename(columns={'index': 'Row'})

# 融化数据:将多列日期合并为单列,保留行号和价格
melted_data = df.melt(
    id_vars=['Row', 'Price'],
    value_vars=date_columns,
    value_name='Date'
).dropna(subset=['Date'])  # 移除日期为空的行

# 按日期分组,计算价格均值并收集对应行号
final_result = melted_data.groupby('Date').agg(
    价格均值=('Price', 'mean'),
    对应行号=('Row', lambda x: ', '.join(map(str, x)))
).reset_index()

print(final_result)

输出结果

运行后会得到如下格式的结果:

Date价格均值对应行号
10/11/2223.04
10/22/2222.251, 2, 4, 5
11/23/2238.3333331, 3, 5
12/31/2224.01, 5
6/7/2241.06
8/1/2242.52, 3

说明

  • 用melt函数替代split是更高效的多列数据转换方式,能快速把宽表转为长表,让每个日期都和对应价格关联。
  • 如果不需要行号,只保留均值,可以简化聚合逻辑:melted_data.groupby('Date')['Price'].mean().reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:41