Первая и последняя дата появления переменной в моем фрейме данных - PullRequest
1 голос
/ 16 апреля 2019

Я хочу, чтобы первая и последняя дата появления переменной в моем фрейме данных:


   datetime           A
2019-03-04 00:03      1
2019-03-04 00:04      1
2019-03-04 00:05      2
2019-03-04 00:06      2 
2019-03-04 00:07      1
2019-03-04 00:08      2
2019-03-04 00:09      3
2019-03-04 00:10      3
2019-03-04 00:11      3
2019-03-04 00:12      4
2019-03-04 00:13      3

желаемый вывод:

A            First                     Last
1      2019-03-04 00:03          2019-03-04 00:07
2      2019-03-04 00:05          2019-03-04 00:08
3      2019-03-04 00:09          2019-03-04 00:13
4      2019-03-04 00:12          2019-03-04 00:12

Я пробовал это:

data_df=pd.Series({x : y.datetime.tolist() for x , y in df.groupby('A')})
data_df=pd.DataFrame({'A':data_df.index, 'datetime':data_df.values})
data_df

У меня есть этот вывод

A                              datetime
1       [2019-03-04 00:03,2019-03-04 00:04,2019-03-04 00:07]
2       [2019-03-04 00:05,2019-03-04 00:06,2019-03-04 00:08]
3       [2019-03-04 00:09,2019-03-04 00:10,2019-03-04 00:11,2019-03-04 00:13]
4       [2019-03-04 00:12]

1 Ответ

1 голос
/ 16 апреля 2019

Используйте agg и передайте список функций для вашего groupby объекта:

In[108]:
df.groupby('A').agg(['first','last'])

Out[108]: 
             datetime                    
                first                last
A                                        
1 2019-03-04 00:03:00 2019-03-04 00:07:00
2 2019-03-04 00:05:00 2019-03-04 00:08:00
3 2019-03-04 00:09:00 2019-03-04 00:13:00
4 2019-03-04 00:12:00 2019-03-04 00:12:00

При необходимости вы можете позвонить reset_index:

In[109]:
df.groupby('A').agg(['first','last']).reset_index()

Out[109]: 
   A            datetime                    
                   first                last
0  1 2019-03-04 00:03:00 2019-03-04 00:07:00
1  2 2019-03-04 00:05:00 2019-03-04 00:08:00
2  3 2019-03-04 00:09:00 2019-03-04 00:13:00
3  4 2019-03-04 00:12:00 2019-03-04 00:12:00

Это вызывает first и last для каждой группы

Обновление Спасибо @ Wen-Ben за предложение, если мы выберем один столбец, то это не создаст мультииндекс в df:

In[110]:
df.groupby('A')['datetime'].agg(['first','last'])

Out[110]: 
                first                last
A                                        
1 2019-03-04 00:03:00 2019-03-04 00:07:00
2 2019-03-04 00:05:00 2019-03-04 00:08:00
3 2019-03-04 00:09:00 2019-03-04 00:13:00
4 2019-03-04 00:12:00 2019-03-04 00:12:00

Что соответствует вашему желаемому выводу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...