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

Spark中如何基于日期计算两个DataFrame的Weekly_Sales平均值

解决方案:按日期计算两个DataFrame的周销售额平均值

没问题,这事儿用Pandas很容易搞定,我给你分步骤说明:

步骤1:准备数据(如果还没构造好DataFrame的话)

先把你给出的两个数据集转换成Pandas DataFrame,方便后续操作:

import pandas as pd

# 第一个DataFrame
df1 = pd.DataFrame({
    'Store': [1, 2, 3, 4],
    'Date': ['05/02/2010', '12/02/2010', '19/02/2010', '26/02/2010'],
    'Weekly_Sales': [249, 455, 415, 194]
})

# 第二个DataFrame
df2 = pd.DataFrame({
    'Store': [5, 6, 7, 8],
    'Date': ['05/02/2010', '12/02/2010', '19/02/2010', '26/02/2010'],
    'Weekly_Sales': [400, 460, 477, 345]
})

步骤2:按日期合并两个DataFrame

我们需要把两个DataFrame按照Date列合并,让同一日期的销售额放在同一行里。合并时记得重命名列,避免重复的Weekly_Sales列名造成混淆:

# 合并DataFrame,按Date列匹配,并重命名销售额列
merged_df = pd.merge(
    df1[['Date', 'Weekly_Sales']].rename(columns={'Weekly_Sales': 'Sales_DF1'}),
    df2[['Date', 'Weekly_Sales']].rename(columns={'Weekly_Sales': 'Sales_DF2'}),
    on='Date',
    how='inner'  # 两个DF的日期完全匹配,用内连接就够了
)

步骤3:计算每日销售额的平均值

现在同一日期的两个销售额都在一行了,直接计算平均值即可:

# 新增平均值列,两种写法任选一种
merged_df['Avg_Weekly_Sales'] = (merged_df['Sales_DF1'] + merged_df['Sales_DF2']) / 2

# 或者用Pandas的mean方法更简洁:
# merged_df['Avg_Weekly_Sales'] = merged_df[['Sales_DF1', 'Sales_DF2']].mean(axis=1)

最终结果

运行完上面的代码后,merged_df的结果会是这样的:

DateSales_DF1Sales_DF2Avg_Weekly_Sales
05/02/2010249400324.5
12/02/2010455460457.5
19/02/2010415477446.0
26/02/2010194345269.5

另一种更简洁的写法(跳过合并步骤)

如果你不需要保留两个原始销售额列,也可以直接按日期对齐后计算:

# 把两个DF的销售额按Date索引对齐,相加后除以2
avg_sales = (df1.set_index('Date')['Weekly_Sales'] + df2.set_index('Date')['Weekly_Sales']) / 2

# 转换成带Date列的DataFrame
avg_sales_df = avg_sales.reset_index().rename(columns={'Weekly_Sales': 'Avg_Weekly_Sales'})

这个方法更高效,适合数据量比较大的场景~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:02:20