如何在大型数据帧中显示pandas groupby中的零计数

时间:2018-05-24 16:02:31

标签: python pandas

我有一个数据框,我希望看到零计数。它基本上是这个问题的副本: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的零计数?

0 个答案:

没有答案