[英]Pandas Pivot Table with external columns
我有一些日期列表,例如:dates_list = [201701,201702,201703,201704]。 這是特定報告所需日期的用戶輸入。
我有一個包含三列的數據庫:id,date和value。
我的數據庫有時沒有用戶詢問的所有日期的記錄(例如:它只有201701和201702的記錄)。 df是我的數據庫。 我有這個命令:
raw = pd.pivot_table(df, index=['id'],
columns=['date'], values=['value'],
aggfunc=[np.sum], fill_value=0, margins=False)
當然,這將返回僅包含兩列的數據透視表:201701和201702。
我想知道是否可以在數據透視表構造中使用dates_list作為列標簽,以便返回201703和201704的滿列零。如果不可能,有人知道這個問題的最佳方法嗎?
提前致謝
樣本數據:
df = pd.DataFrame({'id':[1,1,2,1,2],
'date': [201701,201701,201701,201702,201702],
'value': [0.04, 0.02, 0.07, 0.08, 1.0]})
df
date id value
0 201701 1 0.04
1 201701 1 0.02
2 201701 2 0.07
3 201702 1 0.08
4 201702 2 1.00
raw = pd.pivot_table(df, index=['id'], columns=['date'], values=['value'],
aggfunc=[np.sum], fill_value=0, margins=False)
sum
value
date 201701 201702
id
1 0.06 0.08
2 0.07 1.00
date_list = [201701, 201702, 201703, 201704]
raw.reindex(columns=date_list, fill_value=0)
我得到了ValueError:緩沖區dtype不匹配,預期'Python對象'但是'長了'
你可以在pivot_table
之后pivot_table
reindex
pd.pivot_table(df, index=['id'],
columns=['date'], values=['value'],
aggfunc=[np.sum], fill_value=0, margins=False).\
reindex(columns=[yourlist],fill_value=0)
更新
pd.pivot_table(df, index='id', columns='date', values='value',aggfunc='sum', fill_value=0, margins=False).reindex(columns=[201701,201702,201703])
Out[115]:
date 201701 201702 201703
id
1 0.06 0.08 NaN
2 0.07 1.00 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.