Skip to main content
 首页 » 编程设计

python之具有多列的 Pandas 中的数据透视表

2025年05月04日13zhoujg

我在 Pandas 中有以下数据框

  date        prod    hourly_bucket      tank      trans      flag      
  01-01-2019  TP      05:00:00-06:00:00  2         Preset     Peak 
  01-01-2019  TP      05:00:00-06:00:00  2         Preset     Peak 
  01-01-2019  TP      05:00:00-06:00:00  2         Non Preset Peak 
  02-01-2019  TP      05:00:00-06:00:00  2         Preset     Lean 
  02-01-2019  TP      05:00:00-06:00:00  2         Preset     Lean 
  02-01-2019  TP      05:00:00-06:00:00  2         Non Preset Lean 

我想要的数据框将在日级别和 jar 级别进行聚合,然后计算精益和高峰小时内有多少Preset,Non-Preset交易

  date       tank   Lean_Non_Preset  Lean_Preset  Peak_Non_Preset  Peak_Preset 
  01-01-2019 2      1                2            1                2 

我正在用 pandas 跟随

 lean_peak_preset_cnt = df.pivot_table(index=['date','tank'], columns=['flag'],values=['trans'],aggfunc='count').reset_index()   

但它没有给我所需的解决方案

请您参考如下方法:

将'trans' 添加到参数columns,然后使用map 和 将列中的MultiIndex 展平加入:

lean_peak_preset_cnt = df.pivot_table(index=['date','tank'],  
                                      columns=['flag','trans'], 
                                      aggfunc='size',  
                                      fill_value=0)  
 
lean_peak_preset_cnt.columns = lean_peak_preset_cnt.columns.map('_'.join) 
lean_peak_preset_cnt = lean_peak_preset_cnt.reset_index()  
print (lean_peak_preset_cnt) 
 
         date  tank  Lean_No Preset  Lean_Preset  Peak_Non Preset  Peak_Preset 
0  01-01-2019     2               0            0                1            2 
1  02-01-2019     2               1            2                0            0