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

如何在Python pandas中对两个形状不同的DataFrame执行减法操作

实现思路

核心逻辑是先给每个用户的订单生成顺序编号,再把订单表从长格式转为宽格式,最后和用户主表左关联得到结果。

完整实现代码

import pandas as pd

# 1. 构造示例输入数据(实际使用时替换成你自己的两个DataFrame即可)
# 用户基础信息表
df_user = pd.DataFrame({
    "user_id": [1001, 1002, 1003],
    "user_name": ["张三", "李四", "王五"],
    "user_age": [25, 30, 28]
})
# 用户订单表
df_order = pd.DataFrame({
    "order_id": ["O001", "O002", "O003", "O004"],
    "user_id": [1001, 1001, 1002, 1003],
    "order_amount": [99, 199, 299, 399],
    "order_time": ["2024-01-01", "2024-01-05", "2024-01-03", "2024-01-10"]
})

# 2. 给每个用户的订单生成1开始的顺序编号
df_order["order_rank"] = df_order.groupby("user_id").cumcount() + 1

# 3. 订单表转宽格式,每个用户对应一行,订单字段加序号后缀
df_order_wide = df_order.pivot(index="user_id", columns="order_rank")
df_order_wide.columns = [f"{col}_{rank}" for col, rank in df_order_wide.columns]
df_order_wide = df_order_wide.reset_index()

# 4. 关联用户表和宽格式订单表得到最终结果
result = pd.merge(df_user, df_order_wide, on="user_id", how="left")

# 可选:空值填充,没有对应订单的字段默认是NaN,可按需替换成空字符串等
# result = result.fillna("")

结果验证

输出result即可得到需要的格式,每个用户一行,所有关联的订单信息按序号后缀横向展开,没有对应订单的位置为NaN,可按需填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:54:03