我有一个数据框,我希望看到零计数。它基本上是这个问题的副本:Pandas Groupby How to Show Zero Counts in DataFrame
但不幸的是,答案并非重复。每当我尝试MultiIndex.from_product
方法时,我都会收到错误:
ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.
这是因为我有groupby的几个唯一值。我已经确认,相同的脚本适用于具有较少唯一索引的小得多的数据帧(因此,df.index.levels[i].values
中的元素较少)。
以下是我与之合作的数据框架的想法:
user1 user2 hour
-------------------
Alice Bob 0
Alice Carol 1
Alice Bob 13
Bob Eve 2
到
user1 user2 hour count
-------------------------------
Alice Bob 0 1
Alice Bob 1 0
Alice Bob 2 0
等等,但我得到的是
user1 user2 hour count
-------------------------------
Alice Bob 0 1
Alice Bob 13 1
Alice Carol 1 1
但是,我有user1-user2
的〜1.2M独特组合,因此MultiIndex.from_product
无效。
EDIT :这是我用于某些虚拟数据帧的代码。它适用于虚拟案例,但不适用于较大的案例:
将pandas导入为pd
df = pd.DataFrame({'id':[1,1,2,2,3,3],'hour':[0,1,0,0,1,1], 'to_count': [20,10,5,4,17,6]})
print(df)
agg_df = df.groupby(['id', 'hour']).agg({'to_count': 'count'})
print(df.groupby(['id', 'hour']).agg({'to_count':'count'}))
print(len(agg_df.index.levels))
levels = [agg_df.index.levels[i].values for i in range(len(agg_df.index.levels))]
levels[-1] = [0,1,2]
print(len(levels))
print(agg_df.index.names)
new_index = pd.MultiIndex.from_product(levels, names=agg_df.index.names)
# Reindex the agg_df and fill empty values with zero (NaN by default)
agg_df = agg_df.reindex(new_index, fill_value=0)
# Reset index
agg_df = agg_df.reset_index()
有没有更好的方法在大型pandas数据帧中显示groupby的零计数?