我正在尝试创建一个多索引groupby对象,该对象接收电子邮件域并按月查找百分比变化。当一个月没有观察时,我遇到了问题。
原始数据框
tracking_df = tracking_df[['transaction_mm_yy', 'ST_Email_Domain', 'isFraud', 'order_number']]
我创建了一个数据透视表,结果如下:
tracking_df.pivot_table(index=['transaction_mm_yy', 'ST_Email_Domain'],
`columns='isFraud', values='order_number', aggfunc='count')`
isFraud 1
transaction_mm_yy ST_Email_Domain
2017-10 GMAIL.COM 31.0
HOTMAIL.COM 2.0
TSF.COM 9.0
MAIL.COM 3.0
OUTLOOK.COM 214.0
YAHOO.COM 20.0
2017-11 AOL.COM 3.0
GMAIL.COM 14.0
HOTMAIL.COM 9.0
TSF.COM 5.0
MAIL.COM 9.0
OUTLOOK.COM 14.0
YAHOO.COM 62.0
2017-12 AOL.COM 21.0
GMAIL.COM 101.0
HOTMAIL.COM 13.0
TSF.COM 8.0
MAIL.COM 11.0
OUTLOOK.COM 14.0
YAHOO.COM 41.0
2018-01 AOL.COM 7.0
GMAIL.COM 88.0
HOTMAIL.COM 8.0
TSF.COM 21.0
MAIL.COM 2.0
OUTLOOK.COM 8.0
YAHOO.COM 13.0
如下所示,除2017-10外,AOL.COM每月都会显示观察结果。我希望AOL.COM能够显示NaN计数或零计数的观察结果。
尝试
在documentation之后,我尝试使用 reindex 定义日期范围,然后重新创建索引。
date_index2 = pd.date_range(start_date_range, periods=4, freq='m')
date_index2.strftime('%Y-%m').tolist()
tracking_df.reindex(date_index2, fill_value=0)
然而,我收到错误:
ValueError: cannot include dtype 'M' in a buffer
我可以猜到
答案 0 :(得分:1)
有方法
s.unstack().stack(dropna=False).fillna(0)
Out[774]:
transaction_mm_yy ST_Email_Domain
2017-10 AOL.COM 0.0
GMAIL.COM 31.0
HOTMAIL.COM 2.0
MAIL.COM 3.0
OUTLOOK.COM 214.0
TSF.COM 9.0
YAHOO.COM 20.0
2017-11 AOL.COM 3.0
GMAIL.COM 14.0
HOTMAIL.COM 9.0
MAIL.COM 9.0
OUTLOOK.COM 14.0
TSF.COM 5.0
YAHOO.COM 62.0
dtype: float64
另一种方法是在开头使用类别数据
tracking_df.ST_Email_Domain=tracking_df.ST_Email_Domain.astype('category')
tracking_df.pivot_table(index=['transaction_mm_yy', 'ST_Email_Domain'],
`columns='isFraud', values='order_number', aggfunc='count')
答案 1 :(得分:0)
reindex
df.index.levels
df
。这假设您已将数据透视表分配到df.reindex(pd.MultiIndex.from_product(df.index.levels))
isFraud 1
2017-10 AOL.COM NaN
GMAIL.COM 31.0
HOTMAIL.COM 2.0
MAIL.COM 3.0
OUTLOOK.COM 214.0
TSF.COM NaN
YAHOO.COM 20.0
vTSF.COM 9.0
2017-11 AOL.COM 3.0
GMAIL.COM 14.0
HOTMAIL.COM 9.0
MAIL.COM 9.0
OUTLOOK.COM 14.0
TSF.COM 5.0
YAHOO.COM 62.0
vTSF.COM NaN
2017-12 AOL.COM 21.0
GMAIL.COM 101.0
HOTMAIL.COM 13.0
MAIL.COM 11.0
OUTLOOK.COM 14.0
TSF.COM 8.0
YAHOO.COM 41.0
vTSF.COM NaN
2018-01 AOL.COM 7.0
GMAIL.COM 88.0
HOTMAIL.COM 8.0
MAIL.COM 2.0
OUTLOOK.COM 8.0
TSF.COM 21.0
YAHOO.COM 13.0
vTSF.COM NaN
{{1}}