Pandas: как группировать в разные дни и столбцы? - PullRequest
1 голос
/ 28 марта 2020

У меня есть фрейм данных, подобный следующему (здесь подмножество):

df1
    ID                                                     zone     date
0   6a93b747472484e41f969a0ac02b96161eb0af9edb1fe4...   01529224    2020-01-01
1   6a93b747472484e41f969a0ac02b96161eb0af9edb1fe4...   01529224    2020-01-01
2   6a93b747472484e41f969a0ac02b96161eb0af9edb1fe4...   01529224    2020-01-01
3   6a93b747472484e41f969a0ac02b96161eb0af9edb1fe4...   01529224    2020-01-01
4   6a93b747472484e41f969a0ac02b96161eb0af9edb1fe4...   01529224    2020-01-01

Если я посчитаю отдельный идентификатор за день, у меня будет

tmp = df1.groupby(['date']).agg({"ID": pd.Series.nunique}).reset_index()
tmp.head()

     date        ID
0   2019-12-31  4653
1   2020-01-01  6656
2   2020-01-02     1

Теперь, если я сгруппирую по зонам и дата у меня есть следующее:

distinctID = df1.groupby(['date', "zone"]).agg({"ID": pd.Series.nunique}).reset_index()

       date         zone    ID
0   2019-12-31  00023901    1
1   2019-12-31  00025441    2
2   2019-12-31  00025442    2
3   2019-12-31  00025443    3
4   2019-12-31  00025444    2

Если я подсчитываю ID за каждый день, как у меня:

tmp1 = distinctID.groupby(['date']).agg({"ID": 'sum'}).reset_index()
tmp1.head()

       date      ID
0   2019-12-31  5833
1   2020-01-01  11837
2   2020-01-02  1

Почему я не получаю одинаковый подсчет за каждый день?

1 Ответ

2 голосов
/ 28 марта 2020

Проблема в том, что ваш код не совпадает, я пытаюсь изменить данные, чтобы увидеть его:

print (df1)
         date   zone ID
0  2019-12-31  23901  a
0  2019-12-31  23901  b
0  2019-12-31  25441  b
1  2019-12-31  25441  a
2  2019-12-31  25442  a

#only 2 unique values per date
tmp = df1.groupby(['date']).agg({"ID": pd.Series.nunique}).reset_index()
print (tmp)
         date  ID
0  2019-12-31   2 <-a, b

#if test per 2 columns there are more unique values, because tested separately
distinctID = df1.groupby(['date', "zone"]).agg({"ID": pd.Series.nunique}).reset_index()
print (distinctID)
         date   zone  ID
0  2019-12-31  23901   2 <-a, b
1  2019-12-31  25441   2 <-a, b
2  2019-12-31  25442   1 <-a

#sum is different, because unique values are counts per 2 columns
tmp1 = distinctID.groupby(['date']).agg({"ID": 'sum'}).reset_index()
print (tmp1)
         date  ID
0  2019-12-31   5 <-a, b, a, b, a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...