[英]pivot table in pandas with multiple columns
我在熊貓中有以下數據框
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
我需要的數據幀將是日級別和時段級別的聚合,然后計算Lean and Peak
時段的Preset,Non-Preset
交易次數
date tank Lean_Non_Preset Lean_Preset Peak_Non_Preset Peak_Preset
01-01-2019 2 1 2 1 2
我正在熊貓后面
lean_peak_preset_cnt = df.pivot_table(index=['date','tank'], columns=['flag'],values=['trans'],aggfunc='count').reset_index()
但這沒有給我所需的解決方案
將'trans'
添加到參數columns
,然后使用map
和join
展MultiIndex
中的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
您幾乎在那里:
piv = (df.pivot_table(index=['date', 'tank'], columns=['trans', 'flag'],
aggfunc='size', fill_value=0))
piv.columns = piv.columns.ravel()
大小函數提供所需的計數,您希望將非計數值填充為0,並指定所需的列和索引。 有關更多詳細信息,請參見文檔 。 ravel
將您的多索引列合並到一個級別。
(Nonpreset, Lean) (Nonpreset, Peak) (Preset, Lean) \
#date tank
#01-01-2019 2 0 1 0
#02-01-2019 2 1 0 2
(Preset, Peak)
#date tank
#01-01-2019 2 2
#02-01-2019 2 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.