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

Python中如何基于条件(如指定日期)创建目标结构的透视表?

问题描述

现有两个Pandas DataFrame:

import pandas as pd

data_1 = {'Day': ['Mon','Mon', 'Mon','Tue','Tue'],
        'product': ['A','B','C','D','E']}
df1 = pd.DataFrame(data_1)
data_2 = {'Day': ['Mon','Mon', 'Mon','Mon','Mon', 'Mon','Mon','Mon', 'Mon', 'Mon','Tue','Tue','Wed','Wed'],
        'product_1': ['A','A','A','B','B','B','C','C','C','D','D','E','A','B'],
        'product_2': ['A','B','C','A','B','C','A','B','C','E','B','D','B','A'],
         'price':[10,20,30,40,55,50,60,70,80,90,12,13,14,15]}
df_2 = pd.DataFrame(data_2)

需要基于指定条件(例如筛选Day为周一的数据)生成如下结构的透视表:

A   B   C
A   10  20  30
B   40  55  50
C   60  70  80
解决方案

可以通过以下步骤实现需求:

  1. 获取指定日期对应的有效产品列表
    从df1中提取目标日期下的product值,作为透视表行和列的有效范围:

    target_day = 'Mon'
    valid_products = df1[df1['Day'] == target_day]['product'].tolist()
    
  2. 过滤df_2中的数据
    筛选出df_2中符合目标日期,且product_1和product_2都在有效产品列表内的行:

    filtered_df = df_2[(df_2['Day'] == target_day) & 
                       (df_2['product_1'].isin(valid_products)) & 
                       (df_2['product_2'].isin(valid_products))]
    
  3. 生成透视表并调整结构
    使用pivot方法生成透视表,再通过reindex确保行和列的顺序与df1中目标日期的产品顺序一致:

    pivot_table = filtered_df.pivot(index='product_1', columns='product_2', values='price')
    # 调整行和列的顺序,匹配有效产品列表
    pivot_table = pivot_table.reindex(valid_products).reindex(columns=valid_products)
    

执行上述代码后,pivot_table就是目标结构的透视表。如果需要处理其他日期,只需修改target_day的值即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:01:06