Python 在多索引Groupby对象中填充Nan值
我正在尝试创建一个多索引groupby对象,它接受电子邮件域并按月查找百分比变化。当一个月内没有观察时,我会遇到问题 原始数据帧Python 在多索引Groupby对象中填充Nan值,python,python-3.x,pandas,pivot-table,Python,Python 3.x,Pandas,Pivot Table,我正在尝试创建一个多索引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'],
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
如下图所示,AOL.COM显示了除2017-2010年外每个月的观察结果。我想让AOL.COM显示一个带有NaN计数或零计数的观测值
尝试
接下来,我尝试通过定义日期范围,然后重新创建索引来使用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
我能猜到有办法
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')
您可以使用
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
你能解释一下第二段代码中的.astype('category')吗?@jonjon希望这个链接能有所帮助