Панды, конвертирующие метку времени и ежемесячную сводку - PullRequest
0 голосов
/ 13 мая 2018

У меня есть несколько файлов .csv, которые я импортирую через Pandas, а затем составляю сводку данных (минимальная, максимальная, средняя), в идеале еженедельные и ежемесячные отчеты. У меня есть следующий код, но, похоже, просто не получается получить сводку за месяц, я уверен, что проблема в преобразовании метки времени.

Что я делаю не так?

import pandas as pd
import numpy as np

#Format of the data that is been imported
#2017-05-11 18:29:14+00:00,264.0,987.99,26.5,23.70,512.0,11.763,52.31

df = pd.read_csv('data.csv')
df['timestamp'] = pd.to_datetime(df['time'], format='%Y-%m-%d %H:%M:%S')

print 'month info'
print [g for n, g in df.groupby(pd.Grouper(key='timestamp',freq='M'))]
print(data.groupby('timestamp')['light'].mean())

1 Ответ

0 голосов
/ 13 мая 2018

IIUC, у вас почти есть, и ваше преобразование даты и времени в порядке.Вот пример:

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

>>> df
                        time      x       y     z     a      b       c      d
0  2017-05-11 18:29:14+00:00  264.0  947.99  24.5  53.7  511.0  11.463  12.31
1  2017-05-15 18:29:14+00:00  265.0  957.99  25.5  43.7  512.0  11.563  22.31
2  2017-05-21 18:29:14+00:00  266.0  967.99  26.5  33.7  513.0  11.663  32.31
3  2017-06-11 18:29:14+00:00  267.0  977.99  26.5  23.7  514.0  11.763  42.31
4  2017-06-22 18:29:14+00:00  268.0  997.99  27.5  13.7  515.0  11.800  52.31

Вы можете делать то же, что и раньше, с помощью даты и времени:

df['timestamp'] = pd.to_datetime(df['time'], format='%Y-%m-%d %H:%M:%S')

А затем получите ваши сводки по отдельности:

monthly_mean = df.groupby(pd.Grouper(key='timestamp',freq='M')).mean()
monthly_max = df.groupby(pd.Grouper(key='timestamp',freq='M')).max()
monthly_min = df.groupby(pd.Grouper(key='timestamp',freq='M')).min()

weekly_mean = df.groupby(pd.Grouper(key='timestamp',freq='W')).mean()
weekly_min = df.groupby(pd.Grouper(key='timestamp',freq='W')).min()
weekly_max = df.groupby(pd.Grouper(key='timestamp',freq='W')).max()

# Examples:
>>> monthly_mean
                x       y     z     a      b        c      d
timestamp                                                   
2017-05-31  265.0  957.99  25.5  43.7  512.0  11.5630  22.31
2017-06-30  267.5  987.99  27.0  18.7  514.5  11.7815  47.31

>>> weekly_mean
                x       y     z     a      b       c      d
timestamp                                                  
2017-05-14  264.0  947.99  24.5  53.7  511.0  11.463  12.31
2017-05-21  265.5  962.99  26.0  38.7  512.5  11.613  27.31
2017-05-28    NaN     NaN   NaN   NaN    NaN     NaN    NaN
2017-06-04    NaN     NaN   NaN   NaN    NaN     NaN    NaN
2017-06-11  267.0  977.99  26.5  23.7  514.0  11.763  42.31
2017-06-18    NaN     NaN   NaN   NaN    NaN     NaN    NaN
2017-06-25  268.0  997.99  27.5  13.7  515.0  11.800  52.31

Или объедините их все вместе, чтобы получить мультииндексированный фрейм данных с вашими сводками:

monthly_summary = df.groupby(pd.Grouper(key='timestamp',freq='M')).agg(['mean', 'min', 'max'])
weekly_summary = df.groupby(pd.Grouper(key='timestamp',freq='W')).agg(['mean', 'min', 'max'])

# Example of summary of row 'x':
>>> monthly_summary['x']
             mean    min    max
timestamp                      
2017-05-31  265.0  264.0  266.0
2017-06-30  267.5  267.0  268.0

>>> weekly_summary['x']
             mean    min    max
timestamp                      
2017-05-14  264.0  264.0  264.0
2017-05-21  265.5  265.0  266.0
2017-05-28    NaN    NaN    NaN
2017-06-04    NaN    NaN    NaN
2017-06-11  267.0  267.0  267.0
2017-06-18    NaN    NaN    NaN
2017-06-25  268.0  268.0  268.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...