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

基于Pandas对比两个DataFrame生成3D矩阵的实现方案 [Python]

Pandas 实现两个DataFrame交叉生成3D同号判断矩阵

直接用numpy广播机制就能高效完成计算,完全避免循环,代码简洁性能也更好:

import pandas as pd
import numpy as np

# 你的原始数据
df_C = pd.DataFrame(data=[[-3,-1,-1], [5,3,3], [3,3,1], [-1,-1,-3], [-3,-1,-1], [2,3,1], [1,1,1]], columns=['C1','C2','C3'])
df_F = pd.DataFrame(data=[[-1,1,-1,-1,-1],[1,1,1,1,1],[1,1,1,-1,1],[1,-1,-1,-1,1],[-1,0,0,-1,-1],[1,1,1,-1,0],[1,1,1,-1,1],[1,1,-1,1,-1]], columns=['F1','F2','F3','F4','F5'])

# 扩展维度适配广播,得到形状为「样本数 × df_C列数 × df_F列数」的3D结构
arr_C = df_C.values[..., np.newaxis]
arr_F = df_F.values[:, np.newaxis, :]

# 按规则计算结果
result = np.where(arr_C * arr_F > 0, 1, 0)
# 处理含0的位置赋值为NaN
mask = (arr_C == 0) | (arr_F == 0)
result = result.astype(np.float64)
result[mask] = np.nan

得到的result就是你需要的3D矩阵,维度对应关系:

  • 第0维:和两个DataFrame的行索引一一对应,共7个元素
  • 第1维:对应df_C的列(C1/C2/C3),共3个元素
  • 第2维:对应df_F的列(F1/F2/F3/F4/F5),共5个元素

比如要取第0行样本、C1列、F1列的计算结果,访问result[0,0,0]即可,样例数据下该值为1,完全符合给定规则。如果需要保留列标签方便后续处理,可以用xarray对结果做包装。

内容的提问来源于stack exchange,提问作者Federica F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:54:08