带有多列的熊猫数据透视表

Nei*_*eil 1 python 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
Run Code Online (Sandbox Code Playgroud)

我想要的数据框将是在日级别和槽级别的聚合,然后计算几个小时内的Preset,Non-Preset交易次数Lean and Peak

  date       tank   Lean_Non_Preset  Lean_Preset  Peak_Non_Preset  Peak_Preset
  01-01-2019 2      1                2            1                2
Run Code Online (Sandbox Code Playgroud)

我正在熊猫后面

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

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

jez*_*ael 6

添加'trans'到参数columns,然后MultiIndex使用map和展开各列join

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
Run Code Online (Sandbox Code Playgroud)