Как я могу получить среднесуточные измерения в пандах - PullRequest
2 голосов
/ 10 июля 2019

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

Time                      Country        Server                Load                  
2011-01-01 00:00:00       USA            DNS                   50
2011-01-01 00:15:00       USA            HTTP                  60
2011-01-01 00:37:00       Spain          HTTP                  20
2011-01-01 01:02:00       Spain          DNS                   30
2011-01-01 01:11:00       Italy          DNS                   70
2011-01-01 23:49:00       Italy          File                  15
2011-01-02 00:00:00       USA            File                  74
2011-01-02 00:49:00       Italy          AD                    12
2011-01-02 00:31:00       Italy          AD                    11
2011-01-02 01:13:00       USA            AD                    17
2011-01-02 01:19:00       Spain          File                  18
2011-01-02 23:10:00       Spain          HTTP                  90

Это то, что я хочу вывести

Country                 2011-01-01 - Mean           2011-01-02 - Mean
USA                        55                          45.5
Spain                      25                          54
Italy                      42.5                        11.5  
...

идля сервера

Server                 2011-01-01 - Mean           2011-01-02 - Mean
HTTP                        40                          90
DNS                         50                          NA
FILE                        15                          46  
AD                          NA                          13.3

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Используйте DataFrame.groupby с совокупным средним значением Series.dt.date и измените форму на Series.unstack:

df1 = df.groupby(['Country', df['Time'].dt.date])['Load'].mean().unstack()
print (df1)
Time     2011-01-01  2011-01-02
Country                        
Italy          42.5        11.5
Spain          25.0        54.0
USA            55.0        45.5

df2 = df.groupby(['Server', df['Time'].dt.date])['Load'].mean().unstack()
print (df2)
Time    2011-01-01  2011-01-02
Server                        
AD             NaN   13.333333
DNS           50.0         NaN
File          15.0   46.000000
HTTP          40.0   90.000000
1 голос
/ 10 июля 2019

Используйте pivot_table со средним значением для даты, получая доступ к элементу даты с dt.date:

piv1 = df.pivot_table(index='Country', columns=df['Time'].dt.date, values='Load')

Time     2011-01-01  2011-01-02
Country                        
Italy          42.5        11.5
Spain          25.0        54.0
USA            55.0        45.5

И для сервера:

piv2 = df.pivot_table(index='Server', columns=df['Time'].dt.date, values='Load')

Time    2011-01-01  2011-01-02
Server                        
AD             NaN   13.333333
DNS           50.0         NaN
File          15.0   46.000000
HTTP          40.0   90.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...