Панды: Получить ежедневное описание Dataframe - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть фрейм данных, который выглядит следующим образом:

        provider    timestamp                   vehicle_id
id          
103107  a           2019-09-11 20:05:47+02:00   x
1192195 b           2019-09-11 00:02:46+02:00   y
434508  c           2019-09-11 00:32:39+02:00   z
530388  c           2019-09-11 08:12:56+02:00   z
1773721 b           2019-09-11 20:02:55+02:00   w
...

Я хотел бы получить некоторую статистику по разным vehicle_ids в день.У меня есть это, что позволяет мне сделать describe вручную:

df.groupby(['provider', df['timestamp'].dt.strftime('%Y-%m-%d')])[['vehicle_id']].nunique():

                        vehicle_id
provider    timestamp   
a           2019-09-11  1224
            2019-09-12  1054
b           2019-09-11  2859
            2019-09-12  2761
            2019-09-17  700

Как мне обрабатывать данные, чтобы я мог получить ежедневную мин / макс / среднеена каждый день?Я немного потерян, любая помощь очень ценится.

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

Попробуйте groupby().agg():

new_df.groupby('timestamp').vehicle_id.agg({'min','max','mean'})

Примечание : поскольку вам важен только один столбец в исходных данных, вы можете просто пропустить серию в первой группе вместофрейм данных, т. е.

# note the number of [] around 'vehicle_id'
new_df = (df.groupby(['provider', 
                     df['timestamp'].dt.strftime('%Y-%m-%d')])
          ['vehicle_id'].nunique()
         )

Тогда new_df - это серия с именем vehicle_id, а следующая команда просто

# note the difference before .agg
new_df.groupby('timestamp').agg({'min', 'max', 'mean'})
1 голос
/ 19 сентября 2019

Попробуйте это:

aggregations = ['mean', 'min', 'max', 'std']
result = grouped_df.groupby('timestamp')[vehicle_id].agg(aggregations)

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

grouped_df.columns = [col[1] if col[1] != '' else col[0] for col in grouped_df.columns]
0 голосов
/ 19 сентября 2019

Если я правильно понимаю вашу проблему, все, что вам нужно сделать, это:

df.groupby(['provider', df['timestamp'].dt.strftime('%Y-%m-%d')])[['vehicle_id']].nunique()\
  .groupby('timestamp')['vehicle_id'].describe()

В первой группе вы получите кадр данных с номером уникального vehicle_id на provider и день,Для предоставленной выборки данных это:

                     vehicle_id
provider timestamp             
a        2019-09-11           1
b        2019-09-11           2
c        2019-09-11           1

А во второй будет статистика за день.Таким образом, результат будет

            count      mean      std  min  25%  50%  75%  max
timestamp                                                    
2019-09-11    3.0  1.333333  0.57735  1.0  1.0  1.0  1.5  2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...