Как отобразить нулевое число в pandas groupby для больших фреймов данных - PullRequest
0 голосов
/ 24 мая 2018

У меня есть датафрейм, где я хочу увидеть нулевые значения.По сути, это дубликат этого вопроса: Pandas Groupby Как показать нулевые значения в кадре данных

Но, к сожалению, ответ не является дублирующим.Всякий раз, когда я пробую подход MultiIndex.from_product, я получаю сообщение об ошибке:

ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.

, потому что у меня есть несколько уникальных значений для группировки.Однако я подтвердил, что тот же сценарий работает для гораздо меньших фреймов данных с меньшим количеством уникальных индексов (и, следовательно, с меньшим количеством элементов в 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

Тем не менее, у меня ~ 1,2M уникальных комбинаций user1-user2, поэтомуMultiIndex.from_product не работает.

EDIT : вот код, который я использовал для некоторого фиктивного фрейма данных.Это работает для фиктивного случая, но не для более крупного случая:

import pandas as 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()

Есть ли лучший способ показать нулевые значения для groupby в больших фреймах данных панд?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...