выбор даты для информационного кадра и циклический переход по индексу даты - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть фрейм данных с датами с 2006 по 2016 год и для каждой даты 7 соответствующих значений.Данные приведены ниже:

                   H     PS    T    RH   TD   WDIR   WSP
date                                                        
2006-01-01 11:28:00   38  988.6  0.9  98.0  0.6  120.0  14.4
2006-01-01 11:28:00   46  987.6  0.5  91.0 -0.7  122.0  15.0
2006-01-01 11:28:00   57  986.3  0.5  89.0 -1.1  124.0  15.5
2006-01-01 11:28:00   66  985.1  0.5  90.0 -1.1  126.0  16.0
2006-01-01 11:28:00   74  984.1  0.4  90.0 -1.1  127.0  16.5
2006-01-01 11:28:00   81  983.3  0.4  90.0 -1.1  129.0  17.0

Я хочу выбрать несколько столбцов для каждого года (например, T и RH для всего 2006 года).Таким образом, для каждого года с 2006 по 2016 год выберите группу столбцов, а затем запишите каждый новый фрейм данных в один файл.Я сделал следующее:

df_H_T=(df[['RH','T']])
mask = (df_H_T['date'] >'2016-01-01 00:00:00') & (df_H_T['date']   <='2016-12-31 23:59:59')
df_H_T_2006 =df.loc[mask]
print(df_H_T_2006.head(20))
print(df_H_T_2006.tail(20)) 

Но не работает, потому что кажется, что он не знает, что такое «дата», но потом, когда я печатаю заголовок кадра данных, кажется, что дата там.Что я делаю неправильно ?

Мой второй вопрос: как я могу поместить это в цикл по переменной года, чтобы я не записывал вручную каждый новый кадр данных и выбирал один год за один раз до 2016 года?(Я новичок и никогда не использовал петли в Python).Спасибо, Иоанна

1 Ответ

0 голосов
/ 22 сентября 2018

date находится в исходном кадре данных, но затем вы берете df_H_T=df[['RH','T']], поэтому теперь date не в df_H_T.Вы можете использовать маски, сгенерированные из одного фрейма данных, чтобы разрезать другой, если они имеют одинаковый индекс.Таким образом, вы можете сделать

mask = (df['date'] >'2016-01-01 00:00:00') & (df['date']   <='2016-12-31 23:59:59')
df_H_T_2006 =df_H_T.loc[mask]

(Примечание: вы применяете маску к df, но, вероятно, вы хотите применить ее к df_H_T).

Если dateв формате datetime, вы можете просто взять df['date'].apply(lamda x: x.year==2016).Для вашего цикла for это будет

df_H_T=(df[['RH','T']])
for year in years:
    mask = df['date'].apply(lamda x: x.year==year)
    df_H_T_cur_year =df_H_T.loc[mask]
    print(df_H_T_cur_year.head(20))
    print(df_H_T_cur_year.tail(20)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...