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

如何基于另一DataFrame高效实现DataFrame的透视与分组?

高效解决方案

以下两种方案均采用向量化操作,完全避免逐行循环,处理百万级数据的速度会有数量级的提升。

方案一:基于Pandas的长格式转换+分组聚合

利用melt将宽表转长表,合并后按行索引和日期分组求和,最后转回宽表:

import pandas as pd

# 重置索引,保留原行号用于分组
df1_melt = df1.reset_index().melt(id_vars='index', var_name='col', value_name='value')
df2_melt = df2.reset_index().melt(id_vars='index', var_name='col', value_name='date')

# 合并两个长表,关联数值和对应日期
merged = pd.merge(df1_melt, df2_melt, on=['index', 'col'])

# 按原行号+日期分组求和,再转回宽表
result = merged.groupby(['index', 'date'])['value'].sum().unstack(fill_value=pd.NA)

# 恢复原索引结构
result = result.reset_index(drop=True)

# 可选:按日期排序,与示例输出格式对齐
result = result[sorted(result.columns)]

方案二:基于NumPy的向量化运算

直接利用NumPy的广播和条件筛选,速度比方案一更优,适合超大规模数据集:

import pandas as pd
import numpy as np

# 获取所有唯一日期,作为结果的列
unique_dates = np.unique(df2.values.ravel())
# 初始化结果数组,默认填充NaN
result_array = np.full((len(df1), len(unique_dates)), np.nan)

# 遍历每个日期,计算每行对应日期的数值和
for idx, date in enumerate(unique_dates):
    # 筛选df2中等于当前日期的位置,对df1对应值按行求和
    result_array[:, idx] = df1.where(df2 == date).sum(axis=1)

# 转换为DataFrame并按日期排序
df_result = pd.DataFrame(result_array, columns=unique_dates)
df_result = df_result[sorted(unique_dates)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:45:55