Я получаю разные результаты при использовании groupby в пандах после использования наблюдаемого = True / False в кадре данных с категориальным столбцом с интервалами. В принципе, я считаю, что у меня должны быть точно такие же результаты.
В качестве примера, давайте предположим следующий фрейм данных:
df_testing = pd.DataFrame({"a": ["good", "good", "good", "bad", "good", "good", "bad", "good",
"good", "good"],
"b": [1, 1, 2, 2, 3, 4, 5, 6, 11111, -5455]})
Я преобразую столбец «b», чтобы сгруппировать значения в разные интервалы. Я также заставляю столбец «а» быть категоричным:
df_testing["a"] = df_testing["a"].astype("category")
df_testing["b"] = pd.cut(df_testing["b"], [-9999, 0, 2, 5, 1e99], right=True)
Если я поставлю наблюдаемое = Ложь, результаты будут правильными:
In[310]: df_testing.groupby(by="b", observed=False)["a"].value_counts()
Out[310]:
b a
(-9999.0, 0.0] good 1
(0.0, 2.0] good 3
bad 1
(2.0, 5.0] good 2
bad 1
(5.0, 1e+99] good 2
Name: a, dtype: int64
Но для наблюдаемых = True:
In[311]: df_testing.groupby(by="b", observed=True)["a"].value_counts()
Out[311]:
b a
(0.0, 2.0] good 1
(2.0, 5.0] good 3
bad 1
(5.0, 1e+99] good 2
bad 1
(-9999.0, 0.0] good 2
Name: a, dtype: int64
Как видите, счет одинаков ... Но метки для столбца b во втором случае неверны!
Я использую pandas v0.24.2 (последняя стабильная версия)