如何在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
相关产品推荐
相关产品推荐

