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的结果会是这样的:
| Date | Sales_DF1 | Sales_DF2 | Avg_Weekly_Sales |
|---|---|---|---|
| 05/02/2010 | 249 | 400 | 324.5 |
| 12/02/2010 | 455 | 460 | 457.5 |
| 19/02/2010 | 415 | 477 | 446.0 |
| 26/02/2010 | 194 | 345 | 269.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
相关产品推荐
相关产品推荐

